原因:
vue-router 升级到 3.1.x 后,重复点击导航时,控制台出现报错 ,vue router ≥ v3.1 后 ,回调形式改成 promise api 了,返回的是 promise,如果没有捕获到错误,控制台始终会出现警告。
解决方法:
1在 router 文件夹下 重写push和replace方法:
// 先把VueRouter原型对象的push replace 方法保存一份
let originPush=VueRouter.prototype.push;
let originReplace=VueRouter.prototype.replace;
// 重写push方法 第一个参数
VueRouter.prototype.push=function(location,resolve,reject){
// console.log(this);//实例
// 判断如果成功或失败回调已经传了
if(resolve&&reject){
// call 调用函数一次 改变this指向
originPush.call(this,location,resolve,reject)
}else{
originPush.call(this,location,()=>{},()=>{})
}
}
VueRouter.prototype.replace=function(location,resolve,reject){
if(resolve&&reject){
originReplace.call(this,location,resolve,reject)
}else{
originReplace.call(this,location,()=>{},()=>{})
}
2补齐router.push()的第三个参数
this.$router.push(route, () => {}, (e) => {
console.log('输出报错',e)
}