Vue2中路由參數(shù)($route.params和$route.query)的使用方法詳解
前置說(shuō)明
Vue2 路由對(duì)象:
$route.params:動(dòng)態(tài)路徑參數(shù)(如/user/:id)$route.query:URL 查詢參數(shù)(如/user?name=xxx)
1. 基礎(chǔ)用法(class 裝飾器組件,主流寫法)
1.1 獲取 query 參數(shù)(?key=val)
路由配置:
// router/index.ts
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/demo',
name: 'Demo',
component: () => import('@/views/Demo.vue')
}
]
})訪問(wèn)地址:/demo?name=張三&age=18
組件代碼:
<template>
<div>
<p>姓名:{{ name }}</p>
<p>年齡:{{ age }}</p>
</div>
</template>
<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
@Component
export default class Demo extends Vue {
// 直接在生命周期取值,添加類型
name!: string
age!: number
created() {
// query 取值
this.name = this.$route.query.name as string
this.age = Number(this.$route.query.age)
}
}
</script>1.2 獲取 params 動(dòng)態(tài)路由參數(shù)(/:id)
路由配置:
routes: [
{
path: '/user/:id', // 動(dòng)態(tài)參數(shù) id
name: 'User',
component: () => import('@/views/User.vue')
}
]訪問(wèn)地址:/user/1001
組件取值:
<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
@Component
export default class User extends Vue {
userId!: number
created() {
// params 取值
this.userId = Number(this.$route.params.id)
}
}
</script>2. Vue.extend 寫法(無(wú)裝飾器)
import Vue from 'vue'
export default Vue.extend({
data() {
return {
id: 0,
username: ''
}
},
created() {
// params
this.id = Number(this.$route.params.id)
// query
this.username = this.$route.query.username as string
}
})3. 路由參數(shù)類型定義(TS 進(jìn)階,推薦)
給 $route 自定義參數(shù)類型,消除 any 警告,提升類型提示。
3.1:擴(kuò)展 Vue 路由類型
新建 src/types/vue-router.d.ts
import 'vue-router'
declare module 'vue-router' {
interface RouteParams {
id?: string
}
interface RouteQuery {
name?: string
age?: string
}
}3.2:組件直接使用
TS 會(huì)自動(dòng)識(shí)別參數(shù)類型,無(wú)需強(qiáng)轉(zhuǎn):
created() {
// params 自帶類型
const id = this.$route.params.id
// query 自帶類型
const name = this.$route.query.name
}4. 路由跳轉(zhuǎn)并傳參(配套使用)
4.1 傳 query 參數(shù)
// 編程式導(dǎo)航
this.$router.push({
path: '/demo',
query: { name: '李四', age: 20 }
})4.2 傳 params 參數(shù)
必須搭配 name + routes 配置動(dòng)態(tài)參數(shù),path + params 不生效:
this.$router.push({
name: 'User', // 路由配置里的 name
params: { id: 1002 }
})5. 監(jiān)聽(tīng)路由變化(同組件路由跳轉(zhuǎn),組件不刷新)
當(dāng)路由地址改變但組件復(fù)用(如 /user/1 → /user/2),created/mounted 不會(huì)重新執(zhí)行,需要 watch 監(jiān)聽(tīng):
<script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
@Component({
watch: {
// 監(jiān)聽(tīng)整個(gè)路由對(duì)象
$route(to) {
console.log('新參數(shù):', to.params.id, to.query.name)
this.handleRouteParams()
}
}
})
export default class User extends Vue {
handleRouteParams() {
const id = Number(this.$route.params.id)
console.log('當(dāng)前id:', id)
}
created() {
this.handleRouteParams() // 首次進(jìn)入執(zhí)行
}
}
</script>常見(jiàn)坑 & 注意點(diǎn)
- params 參數(shù)永遠(yuǎn)是 string 類型 路由解析后
params值默認(rèn)字符串,數(shù)字務(wù)必手動(dòng)Number()轉(zhuǎn)換。 path + params無(wú)效 傳params只能用name跳轉(zhuǎn)。- 刷新頁(yè)面 params 丟失 params 不會(huì)保留在 URL 地址欄,刷新丟失;
query會(huì)拼接在地址欄,刷新保留。 - TS 提示 $route 不存在 檢查路由是否全局掛載、
shims文件是否正常。 - 嚴(yán)格模式下
!非空斷言 若參數(shù)必傳,使用變量!: 類型繞過(guò) TS 空值校驗(yàn)
到此這篇關(guān)于Vue2中路由參數(shù)($route.params和$route.query)的使用方法詳解的文章就介紹到這了,更多相關(guān)Vue2路由參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue頁(yè)面路由參數(shù)的傳遞和獲取方式
- vue同路由攜帶不同參數(shù)跳轉(zhuǎn)無(wú)法刷新的解決方案
- Vue路由配置項(xiàng)和參數(shù)使用及說(shuō)明
- Vue路由跳轉(zhuǎn)傳參后無(wú)法清空地址欄參數(shù)問(wèn)題解決方案
- vue 路由跳轉(zhuǎn)四種方式實(shí)踐案例 (帶參數(shù))
- Vue3路由進(jìn)階實(shí)戰(zhàn)教程之參數(shù)傳遞與導(dǎo)航守衛(wèi)核心技術(shù)
- Vue Router中獲取路由傳遞過(guò)來(lái)的參數(shù)(方法詳解)
- 在Vue3中為路由Query參數(shù)標(biāo)注類型的方法
相關(guān)文章
vue返回上一頁(yè)面時(shí)不刷新問(wèn)題及解決方案
這篇文章主要介紹了vue返回上一頁(yè)面時(shí)不刷新問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
vue項(xiàng)目引入本地bootstrap不生效問(wèn)題及解決
這篇文章主要介紹了vue項(xiàng)目引入本地bootstrap不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue項(xiàng)目根據(jù)不同環(huán)境進(jìn)行設(shè)置打包命令的方法
這篇文章主要介紹了vue項(xiàng)目根據(jù)不同環(huán)境進(jìn)行設(shè)置打包命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
Vue.js實(shí)現(xiàn)大屏數(shù)字滾動(dòng)翻轉(zhuǎn)效果
大屏數(shù)字滾動(dòng)翻轉(zhuǎn)效果來(lái)源于最近工作中element后臺(tái)管理頁(yè)面一張大屏的UI圖,該UI圖上有一個(gè)模塊需要有數(shù)字往上翻動(dòng)的效果。本文通過(guò)截圖代碼的形式給大家介紹Vue.js實(shí)現(xiàn)大屏數(shù)字滾動(dòng)翻轉(zhuǎn)效果,感興趣的朋友一起看看吧2019-11-11
解決ElementUI中tooltip出現(xiàn)無(wú)法顯示的問(wèn)題
這篇文章主要介紹了解決ElementUI中tooltip出現(xiàn)無(wú)法顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

