最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中使用router全局守衛(wèi)實(shí)現(xiàn)頁(yè)面攔截的示例

 更新時(shí)間:2020年10月23日 15:23:58   作者:蟈民黨  
這篇文章主要介紹了vue中使用router全局守衛(wèi)實(shí)現(xiàn)頁(yè)面攔截的示例,幫助大家維護(hù)自己的項(xiàng)目,感興趣的朋友可以了解下

一、背景

  在vue項(xiàng)目中使用vue-router做頁(yè)面跳轉(zhuǎn)時(shí),路由的方式有兩種,一種是靜態(tài)路由,另一種是動(dòng)態(tài)路由。而要實(shí)現(xiàn)對(duì)路由的控制需要使用vuex和router全局守衛(wèi)進(jìn)行判斷攔截(安全問(wèn)題文章最后討論)

二、使用場(chǎng)景

  靜態(tài)路由的使用場(chǎng)景:在我們使用靜態(tài)路由實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)時(shí),不管我們是否登錄,當(dāng)我們?cè)诘刂窓谛薷牡刂泛?,?yè)面會(huì)發(fā)生跳轉(zhuǎn)并展示頁(yè)面內(nèi)容(數(shù)據(jù)并不會(huì)被展示出來(lái)),這樣的問(wèn)題顯然是不能夠被接受的;

  動(dòng)態(tài)路由的使用場(chǎng)景:動(dòng)態(tài)路由無(wú)非就是從后端拿到了數(shù)據(jù)然后在加到router里面了。假如用戶(hù)登錄了,在地址欄修改地址便能直接訪(fǎng)問(wèn)。所以動(dòng)態(tài)路由并不能起到攔截作用。

三、解決方案

  使用vuex+router.beforeEach()+動(dòng)態(tài)路由實(shí)現(xiàn)頁(yè)面攔截

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

    router.beforeEach()對(duì)跳轉(zhuǎn)前進(jìn)行攔截判斷;(對(duì)vuex里面的值進(jìn)行判斷)

    當(dāng)用戶(hù)登錄時(shí)請(qǐng)求后臺(tái)拿到數(shù)據(jù),加載路由.(跳轉(zhuǎn)頁(yè)面)

四、實(shí)現(xiàn)過(guò)程

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

a.登錄狀態(tài)信息的值 loginInfo 

b.存儲(chǔ)動(dòng)態(tài)路由的值 routerList

2.router.beforeEach()對(duì)路由跳轉(zhuǎn)前進(jìn)行控制 

//全局守衛(wèi)
router.beforeEach((to, from, next)=> {
 let userId = store.state.loginInfo.id;
 //這里是對(duì)登錄后的值進(jìn)行判斷,也可對(duì)token的值進(jìn)行判斷
 if (userId === '') {
  if (to.meta.requireAuth || to.name == null) {
  next({path: '/'})
  } else {
  next();
  }
 } else {
  //初始化動(dòng)態(tài)路由方法
  initRouter(router, store); 
  next();
 }
 }
);

3.初始化動(dòng)態(tài)路由

在全局守衛(wèi)對(duì)應(yīng)條件下加載動(dòng)態(tài)路由數(shù)據(jù)routerList和在登錄成功時(shí)存儲(chǔ)登錄成功的信息loginInfo 

新建一個(gè)xxx.js文件 引入axios 創(chuàng)建一個(gè)函數(shù)并使用export 暴露該方法;

請(qǐng)求成功拿到數(shù)據(jù)后,把數(shù)據(jù)造成和routes里的數(shù)據(jù)一樣。然后使用 router.addRoutes 添加進(jìn)去;

index中的默認(rèn)路由

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} //是否是登錄權(quán)限控制
   };
   routerList.push(routerObj);
   });
  //add到router中
  router.addRoutes(routerList); 
  //存儲(chǔ)到vuex中
  store.commit('routerList', routerList); 

  }else{
   console.log(rest.data.error);
  }
 }).catch((error)=>{
  console.log(error);
 })
}

4.登錄成功后存儲(chǔ)成功狀態(tài)信息并跳轉(zhuǎn)頁(yè)面

 至此,頁(yè)面攔截功能已實(shí)現(xiàn)。

五、總結(jié)

  該方法實(shí)現(xiàn)主要用到了:

  1.vuex及頁(yè)面刷新時(shí)會(huì)對(duì)vuex進(jìn)行清空,所以比如退出時(shí)要對(duì)頁(yè)面window.location.reload(),其它地方類(lèi)似。

  2.router.beforeEach()鉤子函數(shù)及關(guān)鍵的router.addRoutes方法

  3.es6的一些寫(xiě)法

以上就是vue中使用router全局守衛(wèi)實(shí)現(xiàn)頁(yè)面攔截的示例的詳細(xì)內(nèi)容,更多關(guān)于vue 頁(yè)面攔截的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue中百度地圖定位及附近搜索功能使用步驟

    vue中百度地圖定位及附近搜索功能使用步驟

    這篇文章主要為大家介紹了vue中百度地圖定位及附近搜索功能使用步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Vue?electron零基礎(chǔ)使用教程

    Vue?electron零基礎(chǔ)使用教程

    Electron也可以快速地將你的網(wǎng)站打包成一個(gè)原生應(yīng)用發(fā)布,下面這篇文章主要給大家介紹了關(guān)于Vue和React中快速使用Electron的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 基于vue 實(shí)現(xiàn)表單中password輸入的顯示與隱藏功能

    基于vue 實(shí)現(xiàn)表單中password輸入的顯示與隱藏功能

    這篇文章主要介紹了vue 實(shí)現(xiàn)表單中password輸入的顯示與隱藏功能 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • vue2.0$nextTick監(jiān)聽(tīng)數(shù)據(jù)渲染完成之后的回調(diào)函數(shù)方法

    vue2.0$nextTick監(jiān)聽(tīng)數(shù)據(jù)渲染完成之后的回調(diào)函數(shù)方法

    今天小編就為大家分享一篇vue2.0$nextTick監(jiān)聽(tīng)數(shù)據(jù)渲染完成之后的回調(diào)函數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue實(shí)現(xiàn)pdf文檔在線(xiàn)預(yù)覽功能

    vue實(shí)現(xiàn)pdf文檔在線(xiàn)預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)pdf文檔在線(xiàn)預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象

    vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象

    這篇文章主要介紹了vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象,本文通過(guò)示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • vue cli 3.0 搭建項(xiàng)目的圖文教程

    vue cli 3.0 搭建項(xiàng)目的圖文教程

    這篇文章主要介紹了vue cli 3.0 搭建項(xiàng)目的圖文教程,本文通過(guò)圖片文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue中如何創(chuàng)建多個(gè)ueditor實(shí)例教程

    vue中如何創(chuàng)建多個(gè)ueditor實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于vue中如何創(chuàng)建多個(gè)ueditor的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 前端vue+express實(shí)現(xiàn)文件的上傳下載示例

    前端vue+express實(shí)現(xiàn)文件的上傳下載示例

    本文主要介紹了前端vue+express實(shí)現(xiàn)文件的上傳下載示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 在?Vue?中控制表單輸入方法詳解

    在?Vue?中控制表單輸入方法詳解

    這篇文章主要介紹了在?Vue?中控制表單輸入方法詳解的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

徐汇区| 刚察县| 珲春市| 台前县| 裕民县| 加查县| 北碚区| 青田县| 庐江县| 和林格尔县| 左贡县| 江口县| 彰化县| 赤峰市| 略阳县| 农安县| 偃师市| 万山特区| 临高县| 内丘县| 齐齐哈尔市| 盖州市| 鞍山市| 馆陶县| 渭南市| 哈密市| 临漳县| 自治县| 石门县| 灵寿县| 万源市| 库车县| 靖远县| 民勤县| 荣昌县| 什邡市| 仪陇县| 新乡县| 靖西县| 仁布县| 广州市|