Vue.js 從 Vue Router 0.7.x 遷移
從 Vue Router 0.7.x 遷移
只有 Vue Router 2 是與 Vue 2 相互相容的,所以如果你更新了 Vue ,你也需要更新 Vue Router 。這也是我們在主文件中將遷移路徑的詳情新增進來的原因。
有關使用 Vue Router 2 的完整教程,請參閱 Vue Router 文件。
Router 初始化
router.start
替換
不再會有一個特殊的 API 用來初始化包含 Vue Router 的 app ,這意味著不再是:
|
你只需要傳一個路由屬性給 Vue 例項:
|
或者,如果你使用的是執行時構建 (runtime-only) 方式:
|
升級路徑
執行 遷移助手 找到 router.start
被呼叫的示例。
Route 定義
router.map
替換
路由現在被定義為一個在 router 例項裡的一個 routes
選項陣列。所以這些路由:
|
會以這種方式定義:
|
考慮到不同瀏覽器中遍歷物件不能保證會使用相同的鍵值,這種陣列的語法可以保證更多可預測的路由匹配。
升級路徑
執行 遷移助手 找到 router.map
被呼叫的示例。
router.on
移除
如果你需要在啟動的 app 時通過程式碼生成路由,你可以動態地向路由陣列推送定義來完成這個操作。舉個例子:
|
如果你需要在 router 被例項化後增加新的路由,你可以把 router 原來的匹配方式換成一個包括你新添的加路由的匹配方式:
|
升級路徑
執行 遷移助手 找到 router.on
被呼叫的示例。
router.beforeEach
changed
router.beforeEach
現在是非同步工作的,並且攜帶一個 next
函式作為其第三個引數。
|
|
subRoutes
換名
出於 Vue Router 和其他路由庫一致性的考慮,重新命名為children
升級路徑
執行 遷移助手 找到 subRoutes
選項的示例。
router.redirect
替換
現在用一個路由定義的選項作為代替。舉個例子,你將會更新:
|
成像下面的routes
配置裡定義的樣子:
|
升級路徑
執行 遷移助手 找到 router.redirect
被呼叫的示例。
router.alias
替換
現在是你進行 alias 操作的路由定義裡的一個選項。舉個例子,你需要在你的routes
定義裡將:
|
配置這個樣子:
|
如果你需要進行多次 alias 操作,你也可以使用一個數組語法去實現:
|
升級路徑
執行遷移助手找到 router.alias
被呼叫的示例。
任意的 Route 屬性 替換
現在任意的 route 屬性必須在新 meta 屬性的作用域內,以避免和以後的新特性發生衝突。舉個例子,如果你以前這樣定義:
|
你現在需要把它更新成:
|
如果在一個路由上訪問一個屬性,你仍然會通過 meta 。舉個例子:
|
升級路徑
執行 遷移助手 找到任意的路由不在 meta 作用域下的示例。
URL 中的 Query 陣列 [] 語法 移除
當傳遞陣列給 query 引數時,URL 語法不再是 /foo?users[]=Tom&users[]=Jerry
,取而代之,新語法是 /foo?users=Tom&users=Jerry
,此時 $route.query.users
將仍舊是一個數組,不過如果在該 query 中只有一個引數:/foo?users=Tom
,當直接訪問該路由時,vue-router 將無法知道我們期待的 users
是個陣列。因此,可以考慮新增一個計算屬性並且在每個使用 $route.query.users
的地方以該計算屬性代替:
|
Route 匹配
路由匹配現在使用 path-to-regexp 這個包,這將會使得工作與之前相比更加靈活。
一個或者更多的命名引數 改變
語法稍微有些許改變,所以以/category/*tags
為例,應該被更新為/category/:tags+
。
升級路徑
執行 遷移助手 找到棄用路由語法的示例。
連結
v-link
替換
v-link
指令已經被一個新的 <router-link>
元件指令替代,這一部分的工作已經被 Vue 2 中的元件完成。這將意味著在任何情況下,如果你擁有這樣一個連結:
|
你需要把它更新成:
|
注意:<router-link>
不支援target="_blank"
屬性,如果你想開啟一個新標籤頁,你必須用<a>
標籤。
升級路徑
執行 遷移助手 找到 v-link
指令的示例。
v-link-active
替換
v-link-active
也因為指定了一個在 <router-link>
元件上的 tag 屬性而被棄用了。舉個例子,你需要更新:
|
成這個寫法:
|
<a>
標籤將會成為真實的連結 (並且可以獲取到正確的跳轉),但是啟用的類將會被應用在外部的<li>
標籤上。
升級路徑
執行 遷移助手 找到 v-link-active
指令的示例
程式設計導航
router.go
改變
為了與 HTML5 History API 保持一致性,router.go
已經被用來作為 後退/前進導航,router.push
用來導向特殊頁面。
升級路徑
執行 遷移助手 ,找到 router.go
和 router.push
指令被呼叫的示例。
路由選擇:Modes
hashbang: false
移除
Hashbangs 將不再為谷歌需要去爬去一個網址,所以他們將不再成為雜湊策略的預設選項。
升級路徑
執行 遷移助手 找到 hashbang: false
選項的示。
history: true
替換
所有路由模型選項將被簡化成一個單個的mode
選項。你需要更新:
|
成這個寫法:
|
升級路徑
執行 遷移助手 找到 history: true
選項的示。
abstract: true
替換
所有路由模型選項將被簡化成一個單個的mode
選項。你需要更新:
|
成這個寫法:
|
升級路徑
執行 遷移助手 找到 abstract: true
選項的示例。
路由選項:Misc
saveScrollPosition
替換
它已經被替換為可以接受一個函式的 scrollBehavior
選項,所以滑動行為可以完全的被定製化處理 - 甚至為每次路由進行定製也可以滿足。這將會開啟很多新的可能,但是簡單的複製舊的行為:
|
你可以替換為:
|
升級路徑
執行 遷移路徑 找到 saveScrollPosition: true
選項的示例。
root
換名
為了與 HTML 的<base>
標籤保持一致性,重新命名為 base
。
升級路徑
執行 遷移路徑 找到 root
選項的示例。
transitionOnLoad
移除
由於 Vue 的過渡系統 appear
transition control 的存在,這個選項將不再需要。
升級路徑
執行 遷移路徑 找到 transitionOnLoad: true
選項的示例。
suppressTransitionError
移除
出於簡化鉤子的考慮被移除。如果你真的需要抑制過渡錯誤,你可以使用 try
…catch
作為替代。
升級路徑
執行 遷移指令 找到 suppressTransitionError: true
選項的示例。
路由掛鉤
activate
替換
使用 beforeRouteEnter
這一元件進行替代。
升級路徑
執行 遷移路徑 找到 beforeRouteEnter
鉤子的示例。
canActivate
替換
使用beforeEnter
在路由中作為替代。
升級路徑
執行 遷移路徑 找到 canActivate
鉤子的示例。
deactivate
移除
使用beforeDestroy
或者 destroyed
鉤子作為替代。
升級路徑
執行 遷移路徑 找到 deactivate
鉤子的示例。
canDeactivate
替換
在元件中使用beforeRouteLeave
作為替代。
升級路徑
執行 遷移路徑 找到 canDeactivate
鉤子的示例。
canReuse: false
移除
在新的 Vue 路由中將不再被使用。
升級路徑
執行 遷移助手 找到 canReuse: false
選項的示例。
data
替換
$route
屬性是響應式的,所以你可以就使用一個 watcher 去響應路由的改變,就像這樣:
|
升級路徑
執行 遷移助手 找到 data
鉤子的示例。
$loadingRouteData
移除
定義你自己的屬性 (例如:isLoading
),然後在路由上的 watcher 中更新載入狀態。舉個例子,如果使用 axios 獲取資料:
|
from:https://cn.vuejs.org/v2/guide/migration-vue-router.html