首頁  >  文章  >  web前端  >  使用vue-route 的 beforeEach 實作導航守衛(路由跳轉前驗證登入)功能

使用vue-route 的 beforeEach 實作導航守衛(路由跳轉前驗證登入)功能

亚连
亚连原創
2018-05-26 16:14:493127瀏覽

在網站中普遍會遇到這樣的需求,在路由跳轉前做一些驗證,例如登入驗證(未登入登入頁)。下面我為大家帶來了使用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(); 
});

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

探討Ajax中有關readyState和status的問題

全面解析$.Ajax()方法參數(圖文教學)

基於Ajax技術實作檔案上傳帶進度條

以上是使用vue-route 的 beforeEach 實作導航守衛(路由跳轉前驗證登入)功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn