動態路由
動態路由是指在 URL 路徑中含有動態參數的路由。例如有一個 User 元件,對於所有 ID 各不相同的用戶,都要使用這個元件來渲染。那麼路徑就會是 /user/1、/user/2、/user/3 等等。
1. 路徑參數 params
一個 路徑參數 使用冒號 : 標記:
|
|
這樣,任何匹配 /user/:id 的路徑都會渲染出 User 元件。
路由物件 this.$route 中的 params 屬性表示當前動態路徑參數值。
CodePen Demo:Vue 2.x - 動態路由 路徑參數
2. 多段路徑參數
你可以在一個路由中設置多段 路徑參數,對應的值都會設置到 params 屬性中。例如:
模式:
/user/:id
/user/:username/post/:post_id
匹配路徑:
/user/evan
/user/evan/post/123
params 物件:
{ username: 'evan' }
{ username: 'evan', post_id: '123' }
響應路由參數的變化
當使用路由參數時,元件會重複利用,這意味著元件的生命週期鉤子不會再被呼叫。
因此,若元件想對路由參數的變化作出響應的話,可以使用 watch 監聽:
|
|
或者使用 beforeRouteUpdate() 導航守衛:
|
|
就算是分開定義路由,如果使用相同元件,一樣會重複使用元件,例如:
|
|
捕獲所有路由或 404 Not found 路由
通用符號 * 可以捕獲所有路由路徑,通常用於例外處理。
當路徑不存在時,可以渲染一個錯誤警告,告知使用者當前網址不存在:
|
|
但是這樣子不存在的路徑會保留,因此你可以使用 redirect 轉向 /404:
|
|
當使用通用符號路由時,請確保路由的順序是正確的,也就是說含有通用符號的路由應該放在最後。
1. pathMatch 參數
使用一個通用符號時,$route.params 內會自動添加一個名為 pathMatch 參數。包含了 URL 通過通用符號被匹配的部分。
|
|
高級匹配模式
Vue Router 使用 path-to-regexp 作為路徑匹配引擎,所以可以使用 正則表達式 支持很多高級的匹配模式。
1. 可選路由參數
? 等同於 {0,1} 表示零個或一個,也就是可選。
無論是否添加路由參數都對應的同一個元件:
|
|
|
|
可以在元件內使用 v-if 搭配 $route.params 渲染不同的內容。
2. 精確匹配參數
使用正則規則驗證,只有符合的格式才會跳轉。
舉例來說,必須是正整數:
|
|
|
|
\d 等同[0-9] 匹配 0 到 9 之間的任一數字、+ 等同於 {1,} 表示至一個以上。
純數字的驗證通常用於分頁。另外,精確匹配還可以用來驗證手機、信箱等等資料格式的參數,符合的才允許跳轉。
3. 匹配任意路徑
之前提過的 * 通用符號,匹配任意路徑。
|
|
|
|
4. 部分可選參數
結合可選路由參數和精確匹配參數:
|
|
|
|
匹配優先級
有時候,同一個路徑可以匹配多個路由,此時,匹配的優先級就按照路由的定義順序:誰先定義的,誰的優先級就最高。