動態路由配置
像/user/foo
和/user/bar
都映射到相同的路由。也就是說根據不同的ID
,渲染相同的User
組件。可以使用動態路徑參數來達到這個效果。
動態路徑參數使用冒號:
標記,后面為參數的名稱,參數會被設置到this.$route.params
中。
<script>
// 匹配模式
/user/:username
// 匹配到的路徑為
/user/evan
// $route.params 獲取到的參數對象
{ useranme: 'evan' }
</script>
注意:帶:
冒號的配置可以理解為正則匹配,因此你可以在最后設置一個?
的惰性匹配,表示可以出現 0 次或 1次。
相應路由參數的變化
當使用路由參數時,如從/user/foo
導航到/user/bar
時,原來的組件實例會被復用。因為兩個路由都渲染同一個組件,比起銷毀再創建,復用則顯得更加高效。這也意味着組件的生命周期鈎子函數不會再被調用。
復用組件時,相對路由參數的變化作出相應的話,可以使用watch
(監聽)$route
對象的變化。也可以使用beforeRouteUpdate
路由更新的導航守衛。
<script>
const User = {
template: '...',
// 1. 通過監聽路由對象變化的形式
watch: {
'$route' (to, from) {
// 對路由變化作出響應
}
},
// 2. 通過更新路由的鈎子函數
beforeRouteUpdate (to, from, next) {
// 路由變化會觸發...
}
}
</script>
捕獲所有路由或404 Not found 路由
匹配任意路徑,可以使用通配符(*);注意:使用通配符路由時,必須放在配置的最后。通常用於客戶端404錯誤。
<script>
{ path: '*' } // 會匹配所有路徑
{ path: '/user-*' } // 會匹配以 /user- 開頭的任意路徑
</script>
使用通配符時,$route.params
內會自動添加一個名為pathMatch
參數。注意:pathMatch
獲取的是*
部分的內容
<script>
// { path: '/user-*' }
this.$router.push('/user-admin');
this.$router.params // 獲取到的是 { pathMatch: 'admin' }
</script>