1.重写push或replace方法
VueRouter.prototype.push = function push(location, onResolve, onReject) {
// 成功或者失败的回调
if (onResolve || onReject) {
return originalPush.call(this, location, onResolve, onReject)
}
// 没有指定成功或者失败的回调,要用catch处理
return originalPush.call(this, location).catch((err) => {
// 如果是重复导航产生的错误,不再向外传递错误
if (VueRouter.isNavigationFailure(err)) {
return err
}
// 如果不是重复导航的错误,将错误向下传递
return Promise.reject(err)
})
}
VueRouter.prototype.replace = function (location, onResolve, onReject) {
if (onResolve || onReject) {
return originalReplace.call(this, location, onResolve, onReject)
}
return originalReplace.call(this, location).catch((err) => {
if (VueRouter.isNavigationFailure(err)) {
return err
}
// 如果不是重复导航的错误,将错误向下传递
return Promise.reject(err)
})
}
2.直接catch
this.$router.push("xxx").catch(err => {err})
this.$router.replace("xxx").catch(err => {err})