编程式路由跳转到当前路由, 控制台抛出NavigationDuplicated的错误

Posted fsg6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程式路由跳转到当前路由, 控制台抛出NavigationDuplicated的错误相关的知识,希望对你有一定的参考价值。


router.push 的语法规则如下:

router.push(location(导航路径), onComplete(成功的回调)?, onAbort?(失败的回调))
router.push(location).then(onComplete).catch(onAbort)
router.replace 的语法规则如下:

router.replace(location, onComplete?, onAbort?)
router.replace(location).then(onComplete).catch(onAbort)
解决方案一:

methods: {
//执行 toSearch() 方法后,跳转路由
toSearch(){
this.$router.push(‘/search‘) //————重复点击会报错:NavigationDuplicated
//解决方法如下:
this.$router.push(‘/search‘ , ()=>{})
//或者
this.$router.push(‘/search‘ , undefined , ()=>{})
//或者
this.$router.push(‘/search‘) .catch(()=>{})
}
}

解决方案二:
每次调用push 或者 replace 方法都要写回调函数,很麻烦,因此可以在Vue原型上重构这两个方法,重构时给两个回调函数其中一个指定默认值或者指定catch

 1 import Vue from ‘vue‘
 2 import VueRouter from ‘vue-router‘
 3 Vue.use(VueRouter)
 4 
 5 
 6 //终极解决多次触发push或者repalce,报错的问题
 7 //NavigationDuplicated
 8 
 9 const originPush = VueRouter.prototype.push
10 const originReplace = VueRouter.prototype.replace
11 
12 //location为传过来的对象
13 VueRouter.prototype.push = function(location,onResolved,onRejected){
14   if(onResolved === undefined && onRejected === undefined){
15     // originPush.call目的是让VueRouter实例化对象去调用‘
16     //如果不加,那就是window在调用
17     return originPush.call(this,location).catch(() => {})
18   }else{
19     return originPush.call(this,location,onResolved,onRejected)
20   }
21 }
22 
23 VueRouter.prototype.replace = function(location,onResolved,onRejected){
24   if(onResolved === undefined && onRejected === undefined){
25     // originPush.call目的是让VueRouter实例化对象去调用‘
26     //如果不加,那就是window在调用
27     return originReplace.call(this,location).catch(() => {})
28   }else{
29     return originReplace.call(this,location,onResolved,onRejected)
30   }
31 }
32 
33 
34 import routes from ‘@/router/routes‘
35 
36 export default new VueRouter({
37   routes
38 })

 


原文链接:https://blog.csdn.net/qq_38763173/article/details/105349152

以上是关于编程式路由跳转到当前路由, 控制台抛出NavigationDuplicated的错误的主要内容,如果未能解决你的问题,请参考以下文章

vue 编程式js跳转路由

vue中组件3种编程式路由跳转传参

编程式路由导航+缓存路由组件

vue的路由跳转及传参(编程式导航)

Vue编程式路由导航缓存路由组件新的钩子函数

12.基于vue-router的案例