鍍金池/ 問答/PHP  HTML/ vue-router使用next()跳轉(zhuǎn)到指定路徑時(shí)會(huì)無(wú)限循環(huán)

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

我在路由為 /path 的頁(yè)面這樣寫

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

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

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

問題:

 1.我不太明白為什么會(huì)死循環(huán),我在home頁(yè)面也沒有寫任何鉤子函數(shù)來(lái)跳到result頁(yè)面啊,我也沒有寫全局的beforeEach鉤子函數(shù)。
 2.上面第一段代碼是可用的,自己瞎摸索出來(lái)的,但是不是很明白為什么要加那個(gè)判斷?
回答
編輯回答
編輯回答
陌南塵

自問自答下吧,通過別人指點(diǎn),算是大致理解了,當(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è)離開的鉤子,注意:此時(shí)會(huì)重新觸發(fā)執(zhí)行這個(gè)鉤子,而不是在這個(gè)鉤子函數(shù)繼續(xù)執(zhí)行的,之前是一直沒理解這里,以為是執(zhí)行next('/home')后就會(huì)直接跳到home頁(yè)面呢,當(dāng)重新觸發(fā)后就會(huì)繼續(xù)執(zhí)行next('/home')所以會(huì)一直循環(huán)。至于解決辦法就是判斷下,如果已經(jīng)是/home了就next()。

2017年12月12日 21:27