vue 路由 NavigationDupLicated 解决
- 编程式路由跳转到当前路由(参数不变),多次执行会抛出 NavigationDupLicated 的警告错误。怎么解决
为什么编程式导航进行路由跳转的时候,就会有这种警告错误呢
- 因为 vue-router:3.5.3 版本引入了 promise,假如没有回调函数,错误信息就会交给全局的路由错误处理,因此就会报上述的错误。
解决方法
方法一 运用编程式路由的时候加上成功,失败的回调
this.$router.push(
{ name: "home", params: { id: 1 } },
() => {},
() => {}
);
方法二 重写 push,replace
- 上述方法治标不治本,每次用编程式路由都要加成功失败回调
- 重写 push,replace 思路:
- $router 是 vueRouter 类的一个实例
- push 方法在 vueRouter 的 prototype 上
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function (location, resolve, reject) {
if (resolve && reject) {
originalPush.call(this, location, resolve, reject);
} else {
originalPush.call(this,location,() => {},() => {}
);
}
};
const originalReplace = VueRouter.prototype.replace;
VueRouter.prototype.push = function (location, resolve, reject) {
if (resolve && reject) {
originalReplace.call(this, location, resolve, reject);
} else {
originalReplace.call(this,location,() => {},() => {}
);
}
};