异常错误:NavigationDuplicated

37 阅读1分钟

报错提示

执行多次就会抛出NavigationDuplicated

image.png

原因

  1. 项目中所使用的vue-router最新版,已经引入了promise,promise需要传成功或失败的才可以解决掉;
  2. push是原型上的,非自己的,若要修改需要从原型下手。

【组件实例身上的$router属性就是VueRouter 类的一个实例; 而VueRouter类的实例可以借用原型对象上的方法;所以,当 this.$router.push方法时,这个函数的上下文是VueRouter类的实例】

解决办法

  1. 在router的index.js文件中重写:当路由组件调用push方法,需要传参,第一个参数 location是指引原来的push往哪里跳;
  2. 后面就是传成功或失败的参数(promise);
  3. 注意:编程式导航(push|replace)才会有这种情况的异常,声明式导航是没有这种问题,因为声明式导航内部已经解决这种问题。
//先把VueRouter原型对象上的push保存一份
let originPush = VueRouter.prototype.push;
//重写
VueRouter.prototype.push = function (location, resolve, reject) {
    if (resolve && reject) {
        
        originPush.call(this, location, resolve, reject)
    } else {
        originPush.call(this, location, () => { }, () => { })}
}