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

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

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

解釋1

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

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

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

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

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

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

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

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

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

解釋2

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

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

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

栗子:

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

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

問題

出現(xiàn)無限循環(huán)是因為之前我沒有弄清楚next()流程

因為每次跳轉(zhuǎn)到一個路由的時候都會 觸發(fā) 全局守衛(wèi) 由于判斷條件未改變 所以 一直循環(huán)

解決方法

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

判斷是否登陸(isLogin)

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

解釋3

問題描述

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

導致問題原因

其實導致這個問題的根本是沒有完全理解beforeEach()和next("/somewhere")的作用首先,我們來看看next()的用法

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

解決辦法

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

解釋4

頁面跳墻中使用 vue-router中的 beforeEach的死循環(huá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')
    } 
})

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

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

所以就是想如何跳出這個循環(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')
        }
    } 
})

這樣寫,其實這個會執(zhí)行兩次,第二次進來是以/error的路由進來的

總結(jié)

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

相關(guān)文章

  • Vue實現(xiàn)回到頂部和底部動畫效果

    Vue實現(xiàn)回到頂部和底部動畫效果

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)回到頂部和底部動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • vue打包部署到springboot并通過tomcat運行的操作方法

    vue打包部署到springboot并通過tomcat運行的操作方法

    這篇文章主要介紹了vue打包部署到springboot并通過tomcat運行的操作方法,本文通過實例圖文并茂的形式給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 解決Vue2.0中使用less給元素添加背景圖片出現(xiàn)的問題

    解決Vue2.0中使用less給元素添加背景圖片出現(xiàn)的問題

    今天小編就為大家分享一篇解決Vue2.0中使用less給元素添加背景圖片出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue接入下載文件接口問題

    vue接入下載文件接口問題

    這篇文章主要介紹了vue接入下載文件接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • vue組件中使用props傳遞數(shù)據(jù)的實例詳解

    vue組件中使用props傳遞數(shù)據(jù)的實例詳解

    這篇文章主要介紹了vue組件中使用props傳遞數(shù)據(jù)的實例詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-04-04
  • Vue實現(xiàn)驗證碼功能

    Vue實現(xiàn)驗證碼功能

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • .vue?組件打包成?.js的操作方法

    .vue?組件打包成?.js的操作方法

    這篇文章主要介紹了.vue?組件打包成?.js的操作方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • vue中如何攜帶參數(shù)跳轉(zhuǎn)頁面

    vue中如何攜帶參數(shù)跳轉(zhuǎn)頁面

    這篇文章主要介紹了vue中如何攜帶參數(shù)跳轉(zhuǎn)頁面問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue狀態(tài)管理庫Vuex的入門使用教程

    Vue狀態(tài)管理庫Vuex的入門使用教程

    Vuex是一個專門為Vue.js應用程序開發(fā)的狀態(tài)管理庫。它采用了一個集中式的架構(gòu),將應用程序的所有組件的狀態(tài)存儲在一個單獨的地方。這使得狀態(tài)的管理和維護變得更加容易
    2023-03-03
  • Vue使用pdfobject實現(xiàn)預覽pdf的示例詳解

    Vue使用pdfobject實現(xiàn)預覽pdf的示例詳解

    PDFObject?是一個?JavaScript?庫用來在HTML中動態(tài)嵌入?PDF?文檔。這篇文章主要為大家詳細介紹了使用pdfobject實現(xiàn)預覽pdf的功能,需要的可以了解一下
    2023-03-03

最新評論

洛阳市| 吴川市| 娱乐| 万全县| 石景山区| 吉安市| 大关县| 南雄市| 上饶市| 敦化市| 天气| 南召县| 榆中县| 新丰县| 石景山区| 济宁市| 红河县| 木里| 抚州市| 彰化县| 曲阜市| 潮安县| 赞皇县| 慈溪市| 太和县| 乐至县| 米脂县| 凤城市| 泰兴市| 巩义市| 聊城市| 商水县| 大关县| 乐山市| 广东省| 崇左市| 常德市| 社旗县| 集贤县| 吕梁市| 湾仔区|