日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue.js 从 Vue Router 0.7.x 迁移

發(fā)布時間:2025/3/21 vue 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue.js 从 Vue Router 0.7.x 迁移 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

從 Vue Router 0.7.x 遷移

只有 Vue Router 2 是與 Vue 2 相互兼容的,所以如果你更新了 Vue ,你也需要更新 Vue Router 。這也是我們在主文檔中將遷移路徑的詳情添加進(jìn)來的原因。
有關(guān)使用 Vue Router 2 的完整教程,請參閱?Vue Router 文檔。

Router 初始化

router.start?替換

不再會有一個特殊的 API 用來初始化包含 Vue Router 的 app ,這意味著不再是:

router.start({template: '<router-view></router-view>' }, '#app')

你只需要傳一個路由屬性給 Vue 實例:

new Vue({el: '#app',router: router,template: '<router-view></router-view>' })

或者,如果你使用的是運行時構(gòu)建 (runtime-only) 方式:

new Vue({el: '#app',router: router,render: h => h('router-view') })

升級路徑

運行?遷移助手?找到?router.start?被調(diào)用的示例。

Route 定義

router.map?替換

路由現(xiàn)在被定義為一個在 router 實例里的一個?routes?選項數(shù)組。所以這些路由:

router.map({'/foo': {component: Foo},'/bar': {component: Bar} })

會以這種方式定義:

var router = new VueRouter({routes: [{ path: '/foo', component: Foo },{ path: '/bar', component: Bar }] })

考慮到不同瀏覽器中遍歷對象不能保證會使用相同的鍵值,這種數(shù)組的語法可以保證更多可預(yù)測的路由匹配。

升級路徑

運行?遷移助手?找到?router.map?被調(diào)用的示例。

router.on?移除

如果你需要在啟動的 app 時通過代碼生成路由,你可以動態(tài)地向路由數(shù)組推送定義來完成這個操作。舉個例子:

// 普通的路由 var routes = [// ... ]// 動態(tài)生成的路由 marketingPages.forEach(function (page) {routes.push({path: '/marketing/' + page.slugcomponent: {extends: MarketingComponentdata: function () {return { page: page }}}}) })var router = new Router({routes: routes })

如果你需要在 router 被實例化后增加新的路由,你可以把 router 原來的匹配方式換成一個包括你新添的加路由的匹配方式:

router.match = createMatcher([{path: '/my/new/path',component: MyComponent}].concat(router.options.routes) )

升級路徑

運行?遷移助手?找到?router.on?被調(diào)用的示例。

router.beforeEach?changed

router.beforeEach?現(xiàn)在是異步工作的,并且攜帶一個?next?函數(shù)作為其第三個參數(shù)。

router.beforeEach(function (transition) {if (transition.to.path === '/forbidden') {transition.abort()} else {transition.next()} })
router.beforeEach(function (to, from, next) {if (to.path === '/forbidden') {next(false)} else {next()} })

subRoutes?換名

出于 Vue Router 和其他路由庫一致性的考慮,重命名為children

升級路徑

運行?遷移助手?找到?subRoutes?選項的示例。

router.redirect?替換

現(xiàn)在用一個路由定義的選項作為代替。舉個例子,你將會更新:

router.redirect({'/tos': '/terms-of-service' })

成像下面的routes配置里定義的樣子:

{path: '/tos',redirect: '/terms-of-service' }

升級路徑

運行?遷移助手?找到?router.redirect?被調(diào)用的示例。

router.alias?替換

現(xiàn)在是你進(jìn)行 alias 操作的路由定義里的一個選項。舉個例子,你需要在你的routes定義里將:

router.alias({'/manage': '/admin' })

配置這個樣子:

{path: '/admin',component: AdminPanel,alias: '/manage' }

如果你需要進(jìn)行多次 alias 操作,你也可以使用一個數(shù)組語法去實現(xiàn):

alias: ['/manage', '/administer', '/administrate']

升級路徑

運行遷移助手找到?router.alias?被調(diào)用的示例。

任意的 Route 屬性?替換

現(xiàn)在任意的 route 屬性必須在新 meta 屬性的作用域內(nèi),以避免和以后的新特性發(fā)生沖突。舉個例子,如果你以前這樣定義:

'/admin': {component: AdminPanel,requiresAuth: true }

你現(xiàn)在需要把它更新成:

{path: '/admin',component: AdminPanel,meta: {requiresAuth: true} }

如果在一個路由上訪問一個屬性,你仍然會通過 meta 。舉個例子:

if (route.meta.requiresAuth) {// ... }

升級路徑

運行?遷移助手?找到任意的路由不在 meta 作用域下的示例。

URL 中的 Query 數(shù)組 [] 語法?移除

當(dāng)傳遞數(shù)組給 query 參數(shù)時,URL 語法不再是?/foo?users[]=Tom&users[]=Jerry,取而代之,新語法是?/foo?users=Tom&users=Jerry,此時?$route.query.users?將仍舊是一個數(shù)組,不過如果在該 query 中只有一個參數(shù):/foo?users=Tom,當(dāng)直接訪問該路由時,vue-router 將無法知道我們期待的?users?是個數(shù)組。因此,可以考慮添加一個計算屬性并且在每個使用?$route.query.users?的地方以該計算屬性代替:

export default {// ...computed: {// 此計算屬性將始終是個數(shù)組users () {const users = this.$route.query.usersreturn Array.isArray(users) ? users : [users]}} }

Route 匹配

路由匹配現(xiàn)在使用?path-to-regexp?這個包,這將會使得工作與之前相比更加靈活。

一個或者更多的命名參數(shù)?改變

語法稍微有些許改變,所以以/category/*tags為例,應(yīng)該被更新為/category/:tags+。

升級路徑

運行?遷移助手?找到棄用路由語法的示例。

鏈接

v-link?指令已經(jīng)被一個新的?<router-link>?組件指令替代,這一部分的工作已經(jīng)被 Vue 2 中的組件完成。這將意味著在任何情況下,如果你擁有這樣一個鏈接:

<a v-link="'/about'">About</a>

你需要把它更新成:

<router-link to="/about">About</router-link>

注意:<router-link>不支持target="_blank"屬性,如果你想打開一個新標(biāo)簽頁,你必須用<a>標(biāo)簽。

升級路徑

運行?遷移助手?找到?v-link?指令的示例。

v-link-active?也因為指定了一個在?<router-link>?組件上的 tag 屬性而被棄用了。舉個例子,你需要更新:

<li v-link-active><a v-link="'/about'">About</a> </li>

成這個寫法:

<router-link tag="li" to="/about"><a>About</a> </router-link>

<a>標(biāo)簽將會成為真實的鏈接 (并且可以獲取到正確的跳轉(zhuǎn)),但是激活的類將會被應(yīng)用在外部的<li>標(biāo)簽上。

升級路徑

運行?遷移助手?找到?v-link-active?指令的示例

編程導(dǎo)航

router.go?改變

為了與?HTML5 History API?保持一致性,router.go?已經(jīng)被用來作為?后退/前進(jìn)導(dǎo)航,router.push?用來導(dǎo)向特殊頁面。

升級路徑

運行?遷移助手?,找到?router.go?和?router.push?指令被調(diào)用的示例。

路由選擇:Modes

hashbang: false?移除

Hashbangs 將不再為谷歌需要去爬去一個網(wǎng)址,所以他們將不再成為哈希策略的默認(rèn)選項。

升級路徑

運行?遷移助手?找到?hashbang: false?選項的示。

history: true?替換

所有路由模型選項將被簡化成一個單個的mode?選項。你需要更新:

var router = new VueRouter({history: 'true' })

成這個寫法:

var router = new VueRouter({mode: 'history' })

升級路徑

運行?遷移助手?找到?history: true?選項的示。

abstract: true?替換

所有路由模型選項將被簡化成一個單個的mode?選項。你需要更新:

var router = new VueRouter({abstract: 'true' })

成這個寫法:

var router = new VueRouter({mode: 'abstract' })

升級路徑

運行?遷移助手?找到?abstract: true?選項的示例。

路由選項:Misc

saveScrollPosition?替換

它已經(jīng)被替換為可以接受一個函數(shù)的?scrollBehavior?選項,所以滑動行為可以完全的被定制化處理 - 甚至為每次路由進(jìn)行定制也可以滿足。這將會開啟很多新的可能,但是簡單的復(fù)制舊的行為:

saveScrollPosition: true

你可以替換為:

scrollBehavior: function (to, from, savedPosition) {return savedPosition || { x: 0, y: 0 } }

升級路徑

運行?遷移路徑?找到?saveScrollPosition: true?選項的示例。

root?換名

為了與?HTML 的<base>?標(biāo)簽保持一致性,重命名為?base。

升級路徑

運行?遷移路徑?找到?root?選項的示例。

transitionOnLoad?移除

由于 Vue 的過渡系統(tǒng)?appear?transition control?的存在,這個選項將不再需要。

升級路徑

運行?遷移路徑?找到?transitionOnLoad: true?選項的示例。

suppressTransitionError?移除

出于簡化鉤子的考慮被移除。如果你真的需要抑制過渡錯誤,你可以使用?try…catch?作為替代。

升級路徑

運行?遷移指令?找到?suppressTransitionError: true?選項的示例。

路由掛鉤

activate?替換

使用?beforeRouteEnter?這一組件進(jìn)行替代。

升級路徑

運行?遷移路徑?找到?beforeRouteEnter?鉤子的示例。

canActivate?替換

使用beforeEnter?在路由中作為替代。

升級路徑

運行?遷移路徑?找到?canActivate?鉤子的示例。

deactivate?移除

使用beforeDestroy?或者?destroyed?鉤子作為替代。

升級路徑

運行?遷移路徑?找到?deactivate?鉤子的示例。

canDeactivate?替換

在組件中使用beforeRouteLeave?作為替代。

升級路徑

運行?遷移路徑?找到?canDeactivate?鉤子的示例。

canReuse: false?移除

在新的 Vue 路由中將不再被使用。

升級路徑

運行?遷移助手?找到?canReuse: false?選項的示例。

data?替換

$route屬性是響應(yīng)式的,所以你可以就使用一個 watcher 去響應(yīng)路由的改變,就像這樣:

watch: {'$route': 'fetchData' }, methods: {fetchData: function () {// ...} }

升級路徑

運行?遷移助手?找到?data?鉤子的示例。

$loadingRouteData?移除

定義你自己的屬性 (例如:isLoading),然后在路由上的 watcher 中更新加載狀態(tài)。舉個例子,如果使用?axios?獲取數(shù)據(jù):

data: function () {return {posts: [],isLoading: false,fetchError: null} }, watch: {'$route': function () {var self = thisself.isLoading = trueself.fetchData().then(function () {self.isLoading = false})} }, methods: {fetchData: function () {var self = thisreturn axios.get('/api/posts').then(function (response) {self.posts = response.data.posts}).catch(function (error) {self.fetchError = error})} }

?

from:https://cn.vuejs.org/v2/guide/migration-vue-router.html

總結(jié)

以上是生活随笔為你收集整理的Vue.js 从 Vue Router 0.7.x 迁移的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。