Vue-elementUI - 项目中报错Error: Avoided redundant navigation to current location: “/xxx“.的解决方案

报错显示路由重复,对功能没有影响,可是强迫症看着不爽

具体表现: 重复点击 elementui 中 tab 栏菜单,会报这种错误。

解决方案:

// 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (location) {
   
   
  return originalPush.
### Vue Router 中避免重复导航到当前位置的解决方案Vue.js 开发过程中,`NavigationDuplicated` 警告通常发生在尝试通过 `this.$router.push()` 方法跳转至当前已激活的路由时。这种行为虽然不会阻止程序正常运行,但在控制台中会抛出红色警告信息,影响开发体验。 以下是几种常见的解决方法: #### 1. 使用条件语句防止重复导航 可以通过比较目标路径与当前路径来决定是否执行跳转逻辑。如果两者一致,则不触发导航操作。 ```javascript if (this.$route.path !== '/home') { this.$router.push('/home'); } ``` 这种方法简单有效,适用于大多数场景[^4]。 #### 2. 捕获并忽略 `NavigationDuplicated` 错误 Vue Router 提供了一个基于 Promise 的 API 来处理导航动作的结果。可以利用 `.catch()` 方法捕获错误,并显式忽略特定类型的异常。 ```javascript this.$router.push({ path: '/home' }).catch(err => { if (err.name !== 'NavigationDuplicated') throw err; // 只忽略 NavigationDuplicated 类型的错误 }); ``` 此方式能够优雅地屏蔽冗余导航引发的警告,同时保留其他潜在问题的通知功能[^2]。 #### 3. 更新 Vue Router 至最新版本 自 Vue Router v3.1.0 起引入了新的选项 `replace: true` 或者直接调用 `$router.replace()` 替代传统意义上的 push() 。它允许开发者更灵活地定义如何更新历史记录栈条目而不触发额外校验机制。 例如: ```javascript // Option A - Replace instead of Push this.$router.replace('/home'); // Option B - Use replace option inside route object definition { name: 'Home', path: '/', component: Home, beforeEnter(to, from, next){ if(from.fullPath === '/') return; next(); } } ``` 值得注意的是,当采用替换模式时需注意可能带来的副作用比如丢失前进后退按钮的功能支持等问题[^5]。 综上所述,推荐优先考虑第一种方案即增加判断逻辑减少不必要的切换次数;其次再结合实际情况选用第二种或者第三种策略进一步优化用户体验效果最佳[^1]。 ### 注意事项 - 如果项目依赖于旧版 Vue Router (<v3.1),则无法享受上述某些特性优势,请及时升级框架组件库以获得更好的兼容性和性能表现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值