場景:在 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 }
結果發現控制台中的報錯消失了。