欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue-router使用next()跳轉(zhuǎn)到指定路徑時(shí)會(huì)無(wú)限循環(huán)問(wèn)題

 更新時(shí)間:2023年11月16日 16:17:32   作者:web_blog  
這篇文章主要介紹了vue-router使用next()跳轉(zhuǎn)到指定路徑時(shí)會(huì)無(wú)限循環(huán)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

解釋1

beforeRouteLeave (to, from, next) {
        console.log('離開(kāi)路路由')
       if(to.fullPath==='/home'){
         next();
       }else{
         next('/home')
       }

這個(gè)是組件路由,我想實(shí)現(xiàn)的效果是在這個(gè)頁(yè)面點(diǎn)擊瀏覽器的返回按鈕后要返回 /home頁(yè)面而不是上一個(gè)頁(yè)面,上面的代碼是沒(méi)問(wèn)題的,而我之前的寫法就一直死循環(huán)

// 下面的寫法會(huì)死循環(huán)
     beforeRouteLeave (to, from, next) {
        console.log('離開(kāi)路路由')
       next('/home')
}

vue-router的next()方法無(wú)參和有參時(shí)是不一樣的

當(dāng)執(zhí)行鉤子函數(shù)時(shí)如果遇到next(’/home’)等時(shí)會(huì)中斷當(dāng)前導(dǎo)航,

比如當(dāng)前導(dǎo)航是去/a,那么遇到next(’/home’)后就會(huì)把to.path改為/home,然后會(huì)重新觸發(fā)這個(gè)離開(kāi)的鉤子,

注意:此時(shí)會(huì)重新觸發(fā)執(zhí)行這個(gè)鉤子,而不是在這個(gè)鉤子函數(shù)繼續(xù)執(zhí)行的

當(dāng)重新觸發(fā)后就會(huì)繼續(xù)執(zhí)行next(’/home’)所以會(huì)一直循環(huán)。

至于解決辦法就是判斷下,如果已經(jīng)是/home了就next()。

解釋2

為什么next()指定路徑會(huì)出現(xiàn)死循環(huán)

router.beforeEach((to, from, next) => {
  console.log('beforeEach');
  if(true){
    next('/');
  }else{
    next();
 }
});

next()直接跳轉(zhuǎn)到to.path路徑,沒(méi)有再執(zhí)行一遍beforeEach導(dǎo)航鉤子,next(’/’)或者next(’/login’)自己指定路徑的,路由跳轉(zhuǎn)的時(shí)候還執(zhí)行一遍beforeEach導(dǎo)航鉤子,所以上面出現(xiàn)死循環(huán);

栗子:

如我們登錄頁(yè)(’/login’)面進(jìn)入首頁(yè)(’/’),可以這么寫:

router.beforeEach((to, from, next) => {
var userInfo= JSON. parse(sess ionStorage. getItem('userInfoStorage'));//獲取瀏覽器緩存的用戶信息
if(userInfo){//如果有就直接到首頁(yè)咯
next() ;
}else{
if(to. path==' /login' ){//如果是登錄頁(yè)面路徑,就直接next()
next() ;
}else{//不然就跳轉(zhuǎn)到登錄;
next(' /login');
}
}
});

問(wèn)題

出現(xiàn)無(wú)限循環(huán)是因?yàn)橹拔覜](méi)有弄清楚next()流程

因?yàn)槊看翁D(zhuǎn)到一個(gè)路由的時(shí)候都會(huì) 觸發(fā) 全局守衛(wèi) 由于判斷條件未改變 所以 一直循環(huán)

解決方法

判斷to路由的meta (isRequireAuthTrue)是否為true

判斷是否登陸(isLogin)

// ('/')為登陸界面  
// next() 默認(rèn)跳轉(zhuǎn)to的path
if(isRequireAuthTrue){
    if(isLogin){
      console.log('導(dǎo)航守衛(wèi)保護(hù)');
      next(); //成功則跳轉(zhuǎn)
    }else {
      console.log('你還沒(méi)有登陸!');
      next({path:'/'}) //失敗則跳轉(zhuǎn)到登陸頁(yè)面
    }
  }else {
    next();//不需要導(dǎo)航守衛(wèi)的則直接next跳轉(zhuǎn)
  }

解釋3

問(wèn)題描述

在調(diào)用Vue中的全局前置導(dǎo)航守衛(wèi)beforeEach(to, from, next)中的next函數(shù),在給next()傳參數(shù)的時(shí)候出現(xiàn)死循環(huán)的問(wèn)題!

導(dǎo)致問(wèn)題原因

其實(shí)導(dǎo)致這個(gè)問(wèn)題的根本是沒(méi)有完全理解beforeEach()和next("/somewhere")的作用首先,我們來(lái)看看next()的用法

究其根本是當(dāng)執(zhí)行了next("/somewhere")的時(shí)候又觸發(fā)了beforeEach()這個(gè)鉤子,所以就變成了無(wú)限死循環(huán)!

解決辦法

router.beforeEach((to, from, next) => {
    let {path} = to;
    if(path=== "/somewhere") {
        next(); // 導(dǎo)航目的地符合預(yù)期,繼續(xù)后續(xù)事情
     }else {
        next("/somewhere");  
        // 導(dǎo)航目的地不符合預(yù)期,重新路由新路徑地址,然后會(huì)再次觸發(fā)beforeEach鉤子并進(jìn)行二次判斷
    }
});

解釋4

頁(yè)面跳墻中使用 vue-router中的 beforeEach的死循環(huán)問(wèn)題

問(wèn)題展現(xiàn)

import Router from 'vue-router'
const router = new Router({
    {path: '/', component: index },
    {path: '/login', component: login},
    {path: '/error', component: error},
    {path: '*', component: error}
})

router.beforeEach((to, from, next) => {
    const isLogin = sessionStorage.getItem('loginData')
    if (isLogin) {
        next()
    } else {
        next('/error')
    } 
})

最近在使用時(shí),一直陷入死循環(huán),當(dāng)時(shí)的想法是如何將路由提取出來(lái),脫離beforeEach的控制,之后發(fā)現(xiàn)不可行。

上面問(wèn)題再現(xiàn),會(huì)出現(xiàn)死循環(huán),因?yàn)?/error 會(huì)在進(jìn)入前 又要進(jìn)入beforeEach中 ,這樣就會(huì)一直循環(huán)下去

所以就是想如何跳出這個(gè)循環(huán)即可

router.beforeEach((to, from, next) => {
    const isLogin = sessionStorage.getItem('loginData')
    if (isLogin) {
        next()
    } else {
        //next('/error')
        if (to.path === '/error') { //這就是跳出循環(huán)的關(guān)鍵
           next()
        } else {
            next('/error')
        }
    } 
})

這樣寫,其實(shí)這個(gè)會(huì)執(zhí)行兩次,第二次進(jìn)來(lái)是以/error的路由進(jìn)來(lái)的

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何在vue中使用ant-design-vue組件

    如何在vue中使用ant-design-vue組件

    這篇文章主要介紹了如何在vue中使用ant-design-vue組件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 關(guān)于vue狀態(tài)過(guò)渡transition不起作用的原因解決

    關(guān)于vue狀態(tài)過(guò)渡transition不起作用的原因解決

    這篇文章主要介紹了關(guān)于vue狀態(tài)過(guò)渡transition不起作用的原因解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • vue $nextTick實(shí)現(xiàn)原理深入詳解

    vue $nextTick實(shí)現(xiàn)原理深入詳解

    這篇文章主要介紹了vue $nextTick實(shí)現(xiàn)原理深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • vue3中的defineExpose使用示例教程

    vue3中的defineExpose使用示例教程

    這篇文章主要介紹了vue3中的defineExpose使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • vue 使用 vue-pdf 實(shí)現(xiàn)pdf在線預(yù)覽的示例代碼

    vue 使用 vue-pdf 實(shí)現(xiàn)pdf在線預(yù)覽的示例代碼

    這篇文章主要介紹了vue 使用 vue-pdf 實(shí)現(xiàn)pdf在線預(yù)覽的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • vant-ui框架的一個(gè)bug(解決切換后onload不觸發(fā))

    vant-ui框架的一個(gè)bug(解決切換后onload不觸發(fā))

    這篇文章主要介紹了vant-ui框架的一個(gè)bug(解決切換后onload不觸發(fā)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Vue.js中vue-property-decorator的使用方法詳解

    Vue.js中vue-property-decorator的使用方法詳解

    vue-property-decorator是一個(gè)用于在Vue.js中使用TypeScript裝飾器的庫(kù),它能夠簡(jiǎn)化 Vue 組件的定義,使代碼更加簡(jiǎn)潔和可維護(hù),它能夠簡(jiǎn)化Vue組件的定義,使代碼更加簡(jiǎn)潔和可維護(hù),本文將深入探討vue-property-decorator的使用方法,并展示如何在Vue.js項(xiàng)目中應(yīng)用它
    2024-08-08
  • element-ui循環(huán)顯示radio控件信息的方法

    element-ui循環(huán)顯示radio控件信息的方法

    今天小編就為大家分享一篇element-ui循環(huán)顯示radio控件信息的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 在vue項(xiàng)目中封裝echarts的步驟

    在vue項(xiàng)目中封裝echarts的步驟

    這篇文章主要介紹了在vue項(xiàng)目中封裝echarts的步驟,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-12-12
  • 詳解從vue-loader源碼分析CSS Scoped的實(shí)現(xiàn)

    詳解從vue-loader源碼分析CSS Scoped的實(shí)現(xiàn)

    這篇文章主要介紹了詳解從vue-loader源碼分析CSS Scoped的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論