亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用vue-router beforEach實(shí)現(xiàn)判斷用戶(hù)登錄跳轉(zhuǎn)路由篩選功能

 更新時(shí)間:2018年06月25日 11:39:29   作者:bbuh  
這篇文章主要介紹了vue使用vue-router beforEach實(shí)現(xiàn)判斷用戶(hù)登錄跳轉(zhuǎn)路由篩選,本篇文章默認(rèn)您已經(jīng)會(huì)使用 webpack 或者 vue-cli 來(lái)進(jìn)行環(huán)境的搭建,并且具有一定的vue基礎(chǔ)。需要的朋友可以參考下

在開(kāi)發(fā)webApp的時(shí)候,考慮到用戶(hù)體驗(yàn),經(jīng)常會(huì)把不需要調(diào)用個(gè)人數(shù)據(jù)的頁(yè)面設(shè)置成游客可以訪(fǎng)問(wèn),而當(dāng)用戶(hù)進(jìn)入到一些需要個(gè)人數(shù)據(jù)的,例如購(gòu)物車(chē),個(gè)人中心,我的錢(qián)包等等,在進(jìn)行登錄的驗(yàn)證判斷,如果判斷已經(jīng)登錄,則顯示頁(yè)面,如果判斷未登錄,則直接跳轉(zhuǎn)到登錄頁(yè)面提示用戶(hù)登錄,今天就來(lái)分享下如何使用vue-router的beforEach方法來(lái)實(shí)現(xiàn)這個(gè)需求。

實(shí)現(xiàn)

本篇文章默認(rèn)您已經(jīng)會(huì)使用 webpack 或者 vue-cli 來(lái)進(jìn)行環(huán)境的搭建,并且具有一定的vue基礎(chǔ),如果您目前是一個(gè)新手,那么網(wǎng)上搜索一下就好,相關(guān)文章非常多,這里就不再贅述了。 話(huà)不多說(shuō),直接上代碼。 為了方便日后代碼的可維護(hù)性,我把相關(guān)方法寫(xiě)在了一個(gè)新建的filter.js文件里

 

接下來(lái)進(jìn)入filter.js文件中,首先引入vue-router: import router from "./router"; 然后我們使用 router.beforEach 方法:

router.beforeEach((to, from, next) => {
  //根據(jù)字段判斷是否路由過(guò)濾
  if (to.matched.some(record => record.meta.auth)) {
    if (getToken() !== null) {
      next()
    } else {
      //防止無(wú)限循環(huán)
      if (to.name === 'login') {
        next();
        return
      }
      next({
        path: '/login',
      });
    }
  } else {
    next()//若點(diǎn)擊的是不需要驗(yàn)證的頁(yè)面,則進(jìn)行正常的路由跳轉(zhuǎn)
  }
});

beforEach其實(shí)是vur-router的鉤子函數(shù),可以理解為每個(gè)router跳轉(zhuǎn)之前都會(huì)調(diào)用的一個(gè)方法,既然有before同理當(dāng)然也有afterEach,這個(gè)我們以后再講。

首先來(lái)解釋下beforEach的三個(gè)參數(shù):

  • to:router即將進(jìn)入的路由對(duì)象。
  • from:當(dāng)前導(dǎo)航正要離開(kāi)的路由。
  • next:一個(gè)function,一定要調(diào)用該方法來(lái) resolve 這個(gè)鉤子。執(zhí)行效果依賴(lài) next 方法的調(diào)用參數(shù)。
  • next() : 進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。
  • next(false) : 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了(可能是用戶(hù)手動(dòng)或者瀏覽器后退按鈕),那么 URL 地址會(huì)重置到 from 路由對(duì)應(yīng)的地址。
  • next('/') 或者 next({ path: '/' }): 跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進(jìn)行一個(gè)新的導(dǎo)航。 你可以向 next 傳遞任意位置對(duì)象,且允許設(shè)置諸如 replace: true、name: ‘home' 之類(lèi)的選項(xiàng)以及任何用在 router-link 的 to prop 或 router.push 中的選項(xiàng),注意,next可以通過(guò)query傳遞參數(shù)。
  • next(error) : (2.4.0+) 如果傳入 next 的參數(shù)是一個(gè) Error 實(shí)例,則導(dǎo)航會(huì)被終止且該錯(cuò)誤會(huì)被傳遞給 router.onError() 注冊(cè)過(guò)的回調(diào)。

說(shuō)明

好了,看到這里可能有些人還是沒(méi)有理解,沒(méi)關(guān)系,接下來(lái)我舉個(gè)例子就可以明白了。

假設(shè)我們目前有三個(gè)路由: /home,/mine,/login

我們初始進(jìn)入為 /home ,這時(shí)候點(diǎn)擊跳轉(zhuǎn) /mine ,但是由于我們沒(méi)有登錄,所以會(huì)自動(dòng)跳轉(zhuǎn)到 /login
在以上這種情況下,

to:代表著路由 /mine ,我們要進(jìn)入的路由。

from:代表著路由 /home ,我們將要離開(kāi)的路由。

注意,使用beforEach最后必須要調(diào)用 next() ,否則會(huì)報(bào)錯(cuò),如果不傳參數(shù),我們就會(huì)成功進(jìn)入到 /mine ,如果我們傳遞參數(shù),例如 next('/login') ,那么我們?cè)邳c(diǎn)擊任何路由都會(huì)跳轉(zhuǎn)到 /login 界面。

但是我們的需求是只有點(diǎn)擊需要進(jìn)行登錄驗(yàn)證的頁(yè)面才進(jìn)行攔截跳轉(zhuǎn),因此,我們需要加一些判斷條件來(lái)進(jìn)行路由的篩選。

if (to.matched.some(record => record.meta.auth)) {
    if (getToken() !== null) {
      next()
    }
  }

這里的to就是上面講的參數(shù)to, to.matched 是一個(gè)對(duì)象數(shù)組,里面有to指向路由的相關(guān)信息,例如:path,name,meta等等。

我們用該數(shù)組調(diào)用some()方法根據(jù)返回值 true 或者 false 來(lái)進(jìn)行判斷,所以我們要在router.js路由配置文件中為我們需要驗(yàn)證登錄判斷跳轉(zhuǎn)的路由添加一個(gè)字段來(lái)作為判斷條件

{
   path: '/mine',
   name: 'mine',
   component: mine,
   meta:{auth:true} //我們自己添加的字段
  }

由于給路由添加了 meta:{auth:true} ,所以我們的 to.matched.some(record => record.meta.auth) 會(huì)返回 true ,這時(shí)我們就可以做登錄判斷了,我的項(xiàng)目是通過(guò)把token存入到 localstorage 來(lái)進(jìn)行判斷的, getToken()是我封裝的一個(gè)獲取 localstorage 方法。

if (getToken() !== null) {
      next()//若token不為null,則進(jìn)行路由跳轉(zhuǎn)
    }

如果沒(méi)有token,我們下一步繼續(xù)進(jìn)行判斷,也就是最終目的,進(jìn)行路由攔截,跳轉(zhuǎn)到登錄頁(yè)

else {
      next({
        path: '/login',
      });
    }

但是這時(shí)候我們會(huì)遇到新的問(wèn)題,打開(kāi)控制臺(tái)會(huì)發(fā)現(xiàn)路由會(huì)無(wú)限的循環(huán)并最終崩潰,這是什么原因呢?仔細(xì)閱讀上文紅色加粗,我們可以理解為

next()
next({ path: '/login', });

也就是說(shuō)beforeEach()必須調(diào)用next(),否則就會(huì)出現(xiàn)無(wú)限循環(huán)

next() 和 next('xxx') 是不一樣的,區(qū)別就是前者不會(huì)再次調(diào)用router.beforeEach(),后者會(huì)。而由于我們沒(méi)有token,所以在重新調(diào)用router.beforeEach()后,會(huì)再次進(jìn)入到

else {
      next({
        path: '/login',
      });
    }

所以造成了無(wú)限循環(huán),解決這個(gè)問(wèn)題的方法也很簡(jiǎn)單,我們?cè)?next({ path: '/login', }); 之前增加一個(gè)判斷條件

if (to.name === 'login') {
        next();
        return
    }

如果我們to的定向路由 name == 'login' ,則執(zhí)行 next(); 并return終止代碼運(yùn)行。

以上就是通過(guò)router.beforEach方法進(jìn)行路由攔截了,我們不僅僅可以只做登錄判斷,通過(guò)這個(gè)方法可以實(shí)現(xiàn)很多需求,只要是有關(guān)路由跳轉(zhuǎn)的都可以,在下只是拋磚引玉,如果有哪里不對(duì)的地方或者有更好的方法可以直接在評(píng)論告訴我,非常感謝。

總結(jié)

以上所述是小編給大家介紹的使用vue-router beforEach實(shí)現(xiàn)判斷用戶(hù)登錄跳轉(zhuǎn)路由篩選,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue實(shí)現(xiàn)剪貼板復(fù)制功能

    Vue實(shí)現(xiàn)剪貼板復(fù)制功能

    這篇文章主要介紹了Vue實(shí)現(xiàn)剪貼板復(fù)制功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Vue.js tab實(shí)現(xiàn)選項(xiàng)卡切換

    Vue.js tab實(shí)現(xiàn)選項(xiàng)卡切換

    這篇文章主要為大家詳細(xì)介紹了Vue.js組件tab實(shí)現(xiàn)選項(xiàng)卡切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Vue中的nextTick作用和幾個(gè)簡(jiǎn)單的使用場(chǎng)景

    Vue中的nextTick作用和幾個(gè)簡(jiǎn)單的使用場(chǎng)景

    這篇文章主要介紹了Vue中的nextTick作用和幾個(gè)簡(jiǎn)單的使用場(chǎng)景,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • Vue狀態(tài)管理工具Vuex工作原理解析

    Vue狀態(tài)管理工具Vuex工作原理解析

    Vuex是一個(gè)專(zhuān)為Vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式,下面這篇文章主要給大家介紹了關(guān)于Vue中狀態(tài)管理器(vuex)詳解以及實(shí)際應(yīng)用場(chǎng)景的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Vue3引入SVG圖標(biāo)的流程步驟

    Vue3引入SVG圖標(biāo)的流程步驟

    我們?cè)陂_(kāi)發(fā) Vue 項(xiàng)目的時(shí)候會(huì)使用一些前端組件庫(kù),例如 Element、Ant Design 等,這些組件庫(kù)雖然方便,但是也有一些缺點(diǎn),比如內(nèi)置的圖標(biāo)太少,例如我們開(kāi)發(fā)醫(yī)療、財(cái)務(wù)、工程等一些前端項(xiàng)目,內(nèi)置的圖標(biāo)不能滿(mǎn)足我們的需求,所以我們常常在Vue項(xiàng)目中引入SVG圖標(biāo)
    2024-09-09
  • 如何在vue3+ts項(xiàng)目中使用query和params傳參

    如何在vue3+ts項(xiàng)目中使用query和params傳參

    Vue3中的路由傳參有兩種方式:query和params,下面這篇文章主要給大家介紹了關(guān)于如何在vue3+ts項(xiàng)目中使用query和params傳參的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 在vue3項(xiàng)目中實(shí)現(xiàn)國(guó)際化的代碼示例

    在vue3項(xiàng)目中實(shí)現(xiàn)國(guó)際化的代碼示例

    國(guó)際化就是指在一個(gè)項(xiàng)目中,項(xiàng)目中的語(yǔ)言可以進(jìn)行切換(中英文切換),那么在實(shí)際項(xiàng)目中是如何實(shí)現(xiàn)的呢,本文就給大家詳細(xì)的介紹實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-07-07
  • Vue語(yǔ)法和標(biāo)簽的入門(mén)使用教程

    Vue語(yǔ)法和標(biāo)簽的入門(mén)使用教程

    Vue是一套用于構(gòu)建用戶(hù)界面的漸進(jìn)式框架,下面這篇文章主要給大家介紹了關(guān)于Vue語(yǔ)法和標(biāo)簽使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 使用Vue3新特性構(gòu)建動(dòng)態(tài)表單的方法詳解

    使用Vue3新特性構(gòu)建動(dòng)態(tài)表單的方法詳解

    傳統(tǒng)的表單開(kāi)發(fā)通常需要編寫(xiě)大量的重復(fù)代碼,例如處理用戶(hù)輸入、驗(yàn)證數(shù)據(jù)、更新 UI 等等,為了簡(jiǎn)化開(kāi)發(fā),我們可以借助 Vue 3 的新特性,例如組合式 API 和 ref 對(duì)象,所以本文我們將一起學(xué)習(xí)如何使用 Vue 3 的新特性構(gòu)建一個(gè)更加靈活、可擴(kuò)展的動(dòng)態(tài)表單
    2024-06-06
  • vue3一個(gè)元素如何綁定兩個(gè)或多個(gè)事件

    vue3一個(gè)元素如何綁定兩個(gè)或多個(gè)事件

    這篇文章主要介紹了vue3一個(gè)元素如何綁定兩個(gè)或多個(gè)事件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論