国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue2.0 實現導航守衛(路由守衛)

2019-11-19 13:48:36
字體:
來源:轉載
供稿:網友

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

對此,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 完之前一直處于 等待中。

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

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。

下面寫一個例子:

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

當直接進入登錄頁面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;

總結

以上所述是小編給大家介紹的vue2.0 實現導航守衛(路由守衛),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延津县| 博湖县| 泉州市| 石棉县| 大埔区| 化州市| 瑞丽市| 秭归县| 辽阳市| 枞阳县| 莱芜市| 澄迈县| 丽江市| 蒙自县| 乐安县| 常熟市| 左权县| 博乐市| 樟树市| 辛集市| 旬邑县| 抚松县| 凤翔县| 遂川县| 托克逊县| 江津市| 四子王旗| 霍山县| 攀枝花市| 镇赉县| 临沭县| 兴国县| 五华县| 余江县| 三明市| 阳谷县| 元谋县| 翁牛特旗| 鄯善县| 甘谷县| 文成县|