2017-07-10 105 views
0

我希望有人可以給我一些想法,可能會發生什麼與我的導航菜單上使用vue路由器的特定路由。創建一個jFiddle來重現這一點是不可能的,所以我希望描述就足夠了。古怪與beforeRouteLeave,vue路由器

我有一個標準的vue-cli生成安裝程序,在我的App.vue文件中有一個router.js和一個導航菜單,並且大部分時間它都可以正常工作。但是,在導航到一個特定路線時,菜單變得完全沒有反應 - 即選擇另一個菜單項什麼也不做,它不會帶我去另一條路線。

我能想到的唯一可以解釋的就是'beforeRouteLeave'導航警衛,例如,如果'next'沒有被調用。事實上,一旦我進行了一些伐木工作,它就表現出對我來說完全不可理解的行爲。這是我的「beforeRouteLeave」有問題的部件:

beforeRouteLeave (to, from, next) { 
     console.log("Running beforeRouteLeave"); 
     if (this.editMode && this.isDirty(this.sale)) { 
     console.log("beforeRouteLeave: showing leave confirmation"); 
     bootbox.confirm("Leave without saving?", (result) => { 
      if (result) { 
      next(); 
      } 
     }); 
     } else { 
     console.log("beforeRouteLeave: going to next()"); 
     next(); 
     } 
    } 

當導航無法工作,控制檯顯示只是「運行beforeRouteLeave」的消息。但是這對我來說很神祕,因爲之後我立即進行了一次if/else測試,其中的兩個分支都涉及將消息打印到控制檯。它肯定必須打印「beforeRouteLeave:顯示離開確認」或「beforeRouteLeave:前往下一個()」。但它既不打印也不打印,路線保持不變(我假設實際上已被中止)。可能會發生什麼?

+0

您是否在控制檯中看到任何錯誤? – Tomer

+0

不,控制檯沒有錯誤。奇怪的是,就好像代碼在初始「Running beforeRouteLeave」控制檯消息之後停止執行。正如我所說,我不明白這是如何可能的,因爲if/else的一個分支肯定會被執行。 –

+0

這個問題肯定與'beforeRouteLeave'有關。我嘗試刪除beforeRouteLeave函數,並且所有行爲都像它應該那樣。不過,我確實需要這個功能。 –

回答

0

問題解決了!我運行了'npm update'來更新所有軟件包(vue,vue-router等)到最新版本,現在一切正常。所以顯然在舊版本中存在一些錯誤。對於它如何不執行某些代碼仍然感到迷惑,但我現在可以繼續。