首頁  >  文章  >  web前端  >  vue2.0內路由守衛使用方法詳解

vue2.0內路由守衛使用方法詳解

php中世界最好的语言
php中世界最好的语言原創
2018-05-29 10:25:034583瀏覽

這次帶給大家vue2.0內路由守衛使用方法詳解,vue2.0內路由守衛所使用的注意事項有哪些,以下是實戰案例,一起來看一下。

路由跳轉前做一些驗證,像是登入驗證,是網站中的普遍需求。

對此,vue-route 提供的 beforeRouteUpdate 可以方便地實現導航守衛(navigation-guards)。

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

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

全域守衛

你可以使用router.beforeEach 註冊一個全域前置守衛:

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

當一個導覽觸發時,全域前置守衛會依照建立順序呼叫。守衛是非同步解析執行,此時導航在所有守衛 resolve 完成之前一直處於 等待中。

每個守衛方法接收三個參數:

  1. to: Route: 即將要進入的目標路由物件

  2. from: Route: 目前導覽正要離開的路由

  3. next: Function: 一定要呼叫該方法來resolve 這個鉤子。執行效果依賴 next 方法的呼叫參數。

    1. next(): 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。

    2. next(false): 中斷目前的導航。如果瀏覽器的 URL 改變了(可能是使用者手動或瀏覽器後退按鈕),那麼 URL 位址會重置到 from 路由對應的位址。

    3. next('/') 或 next({ path: '/' }): 跳到一個不同的位址。目前的導航被中斷,然後進行一個新的導航。

    4. next(error): (2.4.0 ) 如果傳入next 的參數是一個Error 實例,則導航會被終止且該錯誤會傳遞給router.onError()註冊過的回調。

確保要呼叫 next 方法,否則鉤子就不會被 resolved。

下面寫一個例子:

1.列舉需要判斷登入狀態的“路由集合”,當跳到集合中的路由時,如果“未登錄狀態”,則跳到登入頁面LoginPage;

2.當直接進入登入頁面LoginPage時,如果“已登入狀態”,則跳到首頁HomePage;

import Vue from 'vue';
import Router from 'vue-router';
import LoginPage from '@/pages/login';
import HomePage from '@/pages/home';
import GoodsListPage from '@/pages/good-list';
import GoodsDetailPage from '@/pages/good-detail';
import CartPage from '@/pages/cart';
import ProfilePage from '@/pages/profile';
Vue.use(Router)
const router = new Router({
 routes: [
  {
   path: '/', // 默认进入路由
   redirect: '/home'  //重定向
  },
  {
   path: '/login',
   name: 'login',
   component: LoginPage
  },
  {
   path: '/home',
   name: 'home',
   component: HomePage
  },
  {
   path: '/good-list',
   name: 'good-list',
   component: GoodsListPage
  },
  {
   path: '/good-detail',
   name: 'good-detail',
   component: GoodsDetailPage
  },
  {
   path: '/cart',
   name: 'cart',
   component: CartPage
  },
  {
   path: '/profile',
   name: 'profile',
   component: ProfilePage
  },
  {
   path: '**',  // 错误路由
   redirect: '/home'  //重定向
  },
 ]
});
// 全局路由守卫
router.beforeEach((to, from, next) => {
 console.log('navigation-guards');
 // to: Route: 即将要进入的目标 路由对象
 // from: Route: 当前导航正要离开的路由
 // next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
 const nextRoute = ['home', 'good-list', 'good-detail', 'cart', 'profile'];
 let isLogin = global.isLogin; // 是否登录
 // 未登录状态;当路由到nextRoute指定页时,跳转至login
 if (nextRoute.indexOf(to.name) >= 0) { 
  if (!isLogin) {
   console.log('what fuck');
   router.push({ name: 'login' })
  }
 }
 // 已登录状态;当路由到login时,跳转至home 
 if (to.name === 'login') {
  if (isLogin) {
   router.push({ name: 'home' });
  }
 }
 next();
});
export default router;

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

推薦閱讀:

怎麼使用Vue中字串範本

#如何處理Mac安裝thrift因bison報錯

以上是vue2.0內路由守衛使用方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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