原因
在 Vue-Router3.1.0+,此时如果支持 Promise,router.push或 router.replace将返回一个 Promise。当我们在脚手架中使用this.$router.replace(path)进行路由跳转的时候,返回一个Promise对象,发生未捕获的异常
解决方法
对Vue-Router原型链上的router.push或 router.replace方法进行重写,这样就不用每次调用方法都要加上catch,具体是重写replace还是push,看你的项目而定!!
在router文件夹里面的index文件夹里面添加
router.push重写
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}
router.place重写
const originalReplace = VueRouter.prototype.replace
originalReplace.replace = function replace(location) {
return originalReplace.call(this, location).catch(err => err)
}