现象
在我们日常使用vue项目中,通过push跳转同一个path的时候,控制台会报错,如图: image.png原因:
造成这个问题的原因是什么呢?我们来看看源码
所以我们只需要将error拦截就行了,也就是通过catch捕获error报错即可。那么我们再看看push源码是如何写的 image.png
可以看到当前的push是通过promise的方式来处理的。所以我们只要重写push即可,那么如何重写push呢。就需要用到原型了。
解决方案
在使用vueRouter的时候重写push即可,(当前个人 项目用的ts,所有有部分不同,js的话只需要将any 等去掉即可)
import VueRouter, { RouteConfig } from 'vue-router';
Vue.use(VueRouter);
// 解决路由重复控制台报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function (location: string): any {
return (originalPush.call(this, location) as any).catch((err: any) => err);
};
网友评论