最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

使用vue-route+beforeEach做出導(dǎo)航守衛(wèi)

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 19:37:13
文檔

使用vue-route+beforeEach做出導(dǎo)航守衛(wèi)

使用vue-route+beforeEach做出導(dǎo)航守衛(wèi):這次給大家?guī)硎褂胿ue-route+beforeEach做出導(dǎo)航守衛(wèi),的注意事項有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。路由跳轉(zhuǎn)前做一些驗(yàn)證,比如登錄驗(yàn)證(未登錄去登錄頁),是網(wǎng)站中的普遍需求。對此,vue-route 提供的 beforeRouteUpdate 可以方便地
推薦度:
導(dǎo)讀使用vue-route+beforeEach做出導(dǎo)航守衛(wèi):這次給大家?guī)硎褂胿ue-route+beforeEach做出導(dǎo)航守衛(wèi),的注意事項有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。路由跳轉(zhuǎn)前做一些驗(yàn)證,比如登錄驗(yàn)證(未登錄去登錄頁),是網(wǎng)站中的普遍需求。對此,vue-route 提供的 beforeRouteUpdate 可以方便地

這次給大家?guī)硎褂胿ue-route+beforeEach做出導(dǎo)航守衛(wèi),的注意事項有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。

路由跳轉(zhuǎn)前做一些驗(yàn)證,比如登錄驗(yàn)證(未登錄去登錄頁),是網(wǎng)站中的普遍需求。對此,vue-route 提供的 beforeRouteUpdate 可以方便地實(shí)現(xiàn)導(dǎo)航守衛(wèi)(navigation-guards)。

導(dǎo)航守衛(wèi)(navigation-guards)這個名字,聽起來怪怪的,但既然官方文檔是這樣翻譯的,就姑且這么叫吧。

貼上文檔地址:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html

先來摘抄一段文檔中beforeRouteUpdate 的用法:

你可以使用 router.beforeEach 注冊一個全局前置守衛(wèi):

const router = new VueRouter({ ... }) 
router.beforeEach((to, from, next) => { 
 // ... 
})

當(dāng)一個導(dǎo)航觸發(fā)時,全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用。守衛(wèi)是異步解析執(zhí)行,此時導(dǎo)航在所有守衛(wèi) resolve 完之前一直處于 等待中。

每個守衛(wèi)方法接收三個參數(shù):

to: Route: 即將要進(jìn)入的目標(biāo) 路由對象

from: Route: 當(dāng)前導(dǎo)航正要離開的路由

next: Function: 一定要調(diào)用該方法來 resolve 這個鉤子。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。

next(): 進(jìn)行管道中的下一個鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。

next(false): 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了(可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應(yīng)的地址。

next('/') 或者 next({ path: '/' }): 跳轉(zhuǎn)到一個不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進(jìn)行一個新的導(dǎo)航。

next(error): (2.4.0+) 如果傳入 next 的參數(shù)是一個 Error 實(shí)例,則導(dǎo)航會被終止且該錯誤會被傳遞給 router.onError() 注冊過的回調(diào)。

確保要調(diào)用 next 方法,否則鉤子就不會被 resolved。

下面寫一個例子,上一篇博客中我們的賬戶頁,包括課程和訂單,都需要在跳轉(zhuǎn)前判斷是不是已登錄;已登錄的情況再去登錄頁,跳轉(zhuǎn)至首頁:

const vueRouter = new Router({ 
 routes: [ 
 //...... 
 { 
 path: '/account', 
 name: 'account', 
 component: Account, 
 children: [ 
 {name: 'course', path: 'course', component: CourseList}, 
 {name: 'order', path: 'order', component: OrderList} 
 ] 
 } 
 ] 
}); 
vueRouter.beforeEach(function (to, from, next) { 
 const nextRoute = [ 'account', 'order', 'course']; 
 const auth = store.state.auth; 
 //跳轉(zhuǎn)至上述3個頁面 
 if (nextRoute.indexOf(to.name) >= 0) { 
 //未登錄 
 if (!store.state.auth.IsLogin) { 
 vueRouter.push({name: 'login'}) 
 } 
 } 
 //已登錄的情況再去登錄頁,跳轉(zhuǎn)至首頁 
 if (to.name === 'login') { 
 if (auth.IsLogin) { 
 vueRouter.push({name: 'home'}); 
 } 
 } 
 next(); 
});

相信看了本文案例你已經(jīng)掌握了方法,更多精彩請關(guān)注Gxl網(wǎng)其它相關(guān)文章!

推薦閱讀:

如何操作JS Cookie插件

如何使用Node.js注冊郵箱激活

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用vue-route+beforeEach做出導(dǎo)航守衛(wèi)

使用vue-route+beforeEach做出導(dǎo)航守衛(wèi):這次給大家?guī)硎褂胿ue-route+beforeEach做出導(dǎo)航守衛(wèi),的注意事項有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。路由跳轉(zhuǎn)前做一些驗(yàn)證,比如登錄驗(yàn)證(未登錄去登錄頁),是網(wǎng)站中的普遍需求。對此,vue-route 提供的 beforeRouteUpdate 可以方便地
推薦度:
標(biāo)簽: 使用 導(dǎo)航 VUE
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top