解決vue-router報NavigationDuplicated: Avoided redundant navigation to current location 的問題


場景:在 App.vue文件中通過watch全局監聽本地中是否有 token,若沒有,則跳轉到登錄頁;若有,則return。

 1 app.vue代碼
 2 
 3 watch: {
 4     $route() {
 5       if (!localStorage.getItem("token")) {
 6         this.$router.push("/login");
 7       } else {
 8         return;
 9       }
10     }
11   }

雖然跳轉到登錄頁了,但是控制台報錯了,如下:

 

 查閱相關資料,總結原因:watch監控執行了兩次,導致了重復觸發了同一個路由。

且在跳轉前后兩行分別打印了99 和 '-----',結果發現確實打印了兩次:

 

 對於報錯,已找到了解決辦法:

在route.js文件中寫入以下代碼即可:

1 const originalPush = Router.prototype.push
2 
3 Router.prototype.push = function push(location) {
4   return originalPush.call(this, location).catch(err => err)
5 }

結果發現控制台中的報錯消失了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM