重写push与replace方法
编程式导航路由跳转到当前路由(参数不变),多次执行会抛出NavigatorDuplicated的禁告错误?
路由跳转有俩种形式:声明式导航,编程式导航
声明式导航没有这类问题的,因为vue-router底层已经处理好了
为什么编程式导航进行路由跳转的时候,就会有这警告?
最新的vue-router引入promise。而promise对象我们需要传入一个成功或失败 回调
通过push传递响应的成功,失败回调函数,可以捕获到当前的错误,可以解决
let result=this.$router.push({name:"search",params:{keyword:this.keyword},query:{k:this.keyword.toUpperCase()}},()=>{},()=>{})
这种写法:治标不治本,将来在别的组件当中push|replace,编程式导航还是有类似的错误。
为什么?
this 当前组件的实例(search)
this.$router属性 当前的这个属性,属性值VueRouter类型的一个实例,当在入口文件注册路由的时候,给组件实例添加$router|$route属性
push:VueRouter类的一个实例
而这个上下文对象就是VueRouter类的实例,而我们想要解决这个问题就需要重写push方法
这样不管你传了还是没有传,都没有问题了