Vue-Router升級致使的Uncaught (in promise)問題

在升級了Vue-Router版本到到3.1.0及以上以後,頁面在跳轉路由時控制檯會報Uncaught (in promise)的問題


這是什麼緣由致使的呢?咱們看一下Vue-Router的版本日誌就知道了
vue


緣由:V3.1.0版本里面新增功能:push和replace方法會返回一個promise, 你可能在控制檯看到未捕獲的異常;git

雖然不影響運行,可是看起來不太美觀~github

解決辦法一:在調用方法的時候用catch捕獲異常vue-router

this.$router.replace({ name: 'foo' }).catch(err => {
    console.log('all good')
})複製代碼

解決方法二:對Router原型鏈上的push、replace方法進行重寫。這樣就避免每次調用時還要加上捕獲異常方法promise

此方法在vue-router的issues裏面的一位大佬提出的bash

import Router from 'vue-router'

const originalPush = Router.prototype.push
Router.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => err)
}複製代碼
相關文章
相關標籤/搜索