路由跳轉前做一些驗證,比如登錄驗證,是網站中的普遍需求。
對此,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 完之前一直處于 等待中。
每個守衛方法接收三個參數:
確保要調用 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;            
新聞熱點
疑難解答
圖片精選