在網站中普遍會遇到這樣的需求,在路由跳轉前做一些驗證,例如登入驗證(未登入登入頁)。下面我為大家帶來了使用vue-route 的beforeEach 實現導航守衛(路由跳轉前驗證登錄)功能,感興趣的朋友一起看看吧
路由跳轉前做一些驗證,比如登錄驗證(未登入去登入頁),是網站中的普遍需求。對此,vue-route 提供的 beforeRouteUpdate 可以方便地實現導航守衛(navigation-guards)。
導航守衛(navigation-guards)這個名字,聽起來怪怪的,但既然官方文件是這樣翻譯的,就姑且這麼叫吧。
先來摘抄一段文件中beforeRouteUpdate 的用法:
你可以使用router.beforeEach 註冊一個全域前守衛:
const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ... })
#當一個導航觸發時,全域前置守衛會依照建立順序呼叫。守衛是非同步解析執行,此時導航在所有守衛 resolve 完成之前一直處於 等待中。
每個守衛方法接收三個參數:
to: Route: 即將要進入的目標路由物件
from: Route: 目前導航正要離開的路由
next: Function: 一定要呼叫該方法來resolve 這個鉤子。執行效果依賴 next 方法的呼叫參數。
next(): 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。
next(false): 中斷目前的導航。如果瀏覽器的 URL 改變了(可能是使用者手動或瀏覽器後退按鈕),那麼 URL 位址會重設到 from 路由對應的位址。
next('/') 或 next({ path: '/' }): 跳到一個不同的位址。目前的導航被中斷,然後進行一個新的導航。
next(error): (2.4.0 ) 如果傳入 next 的參數是一個 Error 實例,則導航會被終止且該錯誤會傳遞給 router.onError() 註冊過的回呼。
確保要呼叫 next 方法,否則鉤子就不會被 resolved。
下面寫一個例子,上一篇部落格中我們的帳號頁,包含課程和訂單,都需要在跳轉前判斷是否已登入;已登入的情況再去登入頁,跳到首頁:
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; //跳转至上述3个页面 if (nextRoute.indexOf(to.name) >= 0) { //未登录 if (!store.state.auth.IsLogin) { vueRouter.push({name: 'login'}) } } //已登录的情况再去登录页,跳转至首页 if (to.name === 'login') { if (auth.IsLogin) { vueRouter.push({name: 'home'}); } } next(); });
上面是我整理給大家的,希望今後會對大家有幫助。
相關文章:
以上是使用vue-route 的 beforeEach 實作導航守衛(路由跳轉前驗證登入)功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!