首頁 > web前端 > js教程 > 主體

beforeEach實作路由跳轉驗證功能

php中世界最好的语言
發布: 2018-05-03 15:31:48
原創
3856 人瀏覽過

這次帶給大家beforeEach實現路由跳轉驗證功能,beforeEach實現路由跳轉驗證的注意事項有哪些,下面就是實戰案例,一起來看一下。

路由跳轉前做一些驗證,例如登入驗證(未登入登入頁),是網站中的普遍需求。對此,vue-route 提供的 beforeRouteUpdate 可以方便地實現導航守衛(navigation-guards)。

導航守衛(navigation-guards)這個名字,聽起來怪怪的,但既然官方文件是這樣翻譯的,就姑且這麼叫吧。

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

先來摘抄一段文件中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(); 
});
登入後複製

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

axios實作資料互動步驟詳解

#Angular Component使用案例詳解

#

以上是beforeEach實作路由跳轉驗證功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板