我們經(jīng)常需要把某種模式匹配到所有的路由,全都映射到同個組件匀哄。例如,我們有一個User組件阱州,對于所有ID各部相同的用戶,都要使用這個組件來渲染苔货。那么,我們可以在vue-router的路由路徑中使用『動態(tài)路徑參數(shù)』(dynamic segment)來達到這個效果:
const User = {
template: '<div>User</div>'
}
const router = new VueRouter({
routes: [
// 動態(tài)路徑參數(shù) 以冒號開頭
{ path: '/user/:id', component: User }
]
})
現(xiàn)在呢夜惭,像** /user/foo **和 /user/bar 都將映射到相同的路由铛绰。
一個『路徑參數(shù)』使用冒號 : 標記诈茧。當匹配到一個路由時捂掰,參數(shù)值會被設(shè)置到 this.$route.params曾沈,可以在每個組件內(nèi)使用鸥昏。于是,我們可以更新** User **的模板吏垮,輸出當前用戶的 ID:
const User = {
template: '<div>User {{ $route.params.id }}</div>'
}
你可以在一個路由中設(shè)置多段『路徑參數(shù)』,對應(yīng)的值都會設(shè)置到 $route.params 中膳汪。例如:
模式 | 匹配路徑 | $route.params |
---|---|---|
/user/:username | /user/evan | { username: 'evan' } |
/user/:username/post/:post_id | /user/evan/post/123 | { username: 'evan', post_id: |
除了** $route.params**
外,$route
對象還提供了其它有用的信息生棍,例如媳谁,$route.query
(如果 URL 中有查詢參數(shù))涂滴、$route.hash
等等。你可以查看 API 文檔 的詳細說明晴音。
響應(yīng)路由參數(shù)的變化
提醒一下柔纵,當使用路由參數(shù)時,例如從 /user/foo 導(dǎo)航到 user/bar搁料,原來的組件實例會被復(fù)用系羞。因為兩個路由都渲染同個組件郭计,比起銷毀再創(chuàng)建椒振,復(fù)用則顯得更加高效。不過庐杨,這也意味著組件的生命周期鉤子不會再被調(diào)用。
復(fù)用組件時灵份,想對路由參數(shù)的變化作出響應(yīng)的話哮洽,你可以簡單地 watch(監(jiān)測變化)$route 對象:
const User = {
template: '...',
watch: {
'$route' (to, from) {
// 對路由變化作出響應(yīng)...
}
}
}