首頁 >web前端 >js教程 >使用vue-route+beforeEach做出導航守衛

使用vue-route+beforeEach做出導航守衛

php中世界最好的语言
php中世界最好的语言原創
2018-06-14 11:42:431985瀏覽

這次帶給大家使用vue-route 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中文網其它相關文章!

推薦閱讀:

如何操作JS Cookie插件

#如何使用Node.js註冊郵箱啟動

以上是使用vue-route+beforeEach做出導航守衛的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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