激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue中使用router全局守衛實現頁面攔截的示例

vue中使用router全局守衛實現頁面攔截的示例

2021-11-04 15:16蟈民黨 JavaScript

這篇文章主要介紹了vue中使用router全局守衛實現頁面攔截的示例,幫助大家維護自己的項目,感興趣的朋友可以了解下

一、背景

  在vue項目中使用vue-router做頁面跳轉時,路由的方式有兩種,一種是靜態路由,另一種是動態路由。而要實現對路由的控制需要使用vuex和router全局守衛進行判斷攔截(安全問題文章最后討論)

二、使用場景

  靜態路由的使用場景:在我們使用靜態路由實現頁面跳轉時,不管我們是否登錄,當我們在地址欄修改地址后,頁面會發生跳轉并展示頁面內容(數據并不會被展示出來),這樣的問題顯然是不能夠被接受的;

  動態路由的使用場景:動態路由無非就是從后端拿到了數據然后在加到router里面了。假如用戶登錄了,在地址欄修改地址便能直接訪問。所以動態路由并不能起到攔截作用。

三、解決方案

  使用vuex+router.beforeEach()+動態路由實現頁面攔截

    頁面刷新時會清楚vuex里面的值;(防止直接修改地址欄)

    router.beforeEach()對跳轉前進行攔截判斷;(對vuex里面的值進行判斷)

    當用戶登錄時請求后臺拿到數據,加載路由.(跳轉頁面)

四、實現過程

1.首先定義vuex里面的值,需要定義兩個值:

a.登錄狀態信息的值 loginInfo 

b.存儲動態路由的值 routerList

vue中使用router全局守衛實現頁面攔截的示例

2.router.beforeEach()對路由跳轉前進行控制 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//全局守衛
router.beforeEach((to, from, next)=> {
 let userId = store.state.loginInfo.id;
 //這里是對登錄后的值進行判斷,也可對token的值進行判斷
 if (userId === '') {
  if (to.meta.requireAuth || to.name == null) {
  next({path: '/'})
  } else {
  next();
  }
 } else {
  //初始化動態路由方法
  initRouter(router, store);
  next();
 }
 }
);

3.初始化動態路由

在全局守衛對應條件下加載動態路由數據routerList和在登錄成功時存儲登錄成功的信息loginInfo 

新建一個xxx.js文件 引入axios 創建一個函數并使用export 暴露該方法;

請求成功拿到數據后,把數據造成和routes里的數據一樣。然后使用 router.addRoutes 添加進去;

index中的默認路由

vue中使用router全局守衛實現頁面攔截的示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import axios from 'axios'
export const initRouter = (router,store)=>{
 if (store.state.routerList.length > 0) {
 return;
 }
 axios.get(' URL')
  .then((rest)=>{
  let routerList = [];
  if(rest.data.success){
  let routers = rest.data.body;
  routers.forEach(router=>{
   let {
    path,
    component,
    name,
   } = router
   let routerObj = {
    path:path,
    name:name,
    component(resolve){
    if (component.startsWith("index")) {
     require(['../components/' + component + '.vue'], resolve)
    
    
    },
    meta:{requireAuth:true} //是否是登錄權限控制
   };
   routerList.push(routerObj);
   });
  //add到router中
  router.addRoutes(routerList);
  //存儲到vuex中
  store.commit('routerList', routerList);
 
  }else{
   console.log(rest.data.error);
  }
 }).catch((error)=>{
  console.log(error);
 })
}

4.登錄成功后存儲成功狀態信息并跳轉頁面

vue中使用router全局守衛實現頁面攔截的示例

 至此,頁面攔截功能已實現。

五、總結

  該方法實現主要用到了:

  1.vuex及頁面刷新時會對vuex進行清空,所以比如退出時要對頁面window.location.reload(),其它地方類似。

  2.router.beforeEach()鉤子函數及關鍵的router.addRoutes方法

  3.es6的一些寫法

以上就是vue中使用router全局守衛實現頁面攔截的示例的詳細內容,更多關于vue 頁面攔截的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/xufeikko/p/10169826.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产美女视频一区二区三区 | 黄色一级片免费观看 | 免费的毛片 | 国产污网站在线观看 | 久久久三区 | 日本一区二区久久久 | 日本精品婷婷久久爽一下 | h视频在线免费看 | 成人综合一区二区 | 国产精品久久久久久久娇妻 | 成人做爰高潮片免费视频美国 | 天堂在线中文资源 | 免费在线观看成人av | 最新日韩精品在线观看 | 一级在线观看视频 | 中文字幕在线观看亚洲 | 久久经典国产视频 | 一区国产在线观看 | 美女羞羞视频在线观看 | 午夜国内精品a一区二区桃色 | 欧美特级一级毛片 | 在线观看视频毛片 | 一级做a爱片毛片免费 | 国产精品久久久久永久免费 | 欧美精品欧美极品欧美激情 | 免费国产羞羞网站视频 | a视频网站 | 无遮挡一级毛片视频 | 久久免费视频精品 | 亚洲天堂岛国片 | 日本在线视频二区 | 蜜桃视频在线免费观看 | 天天色宗合| 亚洲第一视频 | 久久精品国产亚洲7777 | 亚洲免费看片网站 | 羞羞草视频 | 天海翼无删减av三级在线观看 | 日本不卡一区二区三区在线 | 成人 日韩 | 欧美一级久久 |