当使用Vue-Router来进行页面导航时,有时会遇到“NavigationDuplicated: Avoided redundant navigation to current location”报错。这个错误提示很明确,表示重复导航到了当前的页面地址。
当使用Vue-Router来进行页面导航时,有时会遇到“NavigationDuplicated: Avoided redundant navigation to current location”报错。这个错误提示很明确,表示重复导航到了当前的页面地址。
这种错误通常是因为两次相同的路由导航发生在短时间内,例如用户快速点击同一个路由链接或使用了类似于Vue-Router的编程式导航进行了重复的路由跳转。
要解决这个问题,我们可以采取以下两种方案:
解决方案一:使用catch()处理错误
我们可以监听Vue-Router路由跳转的错误,在导航时使用.catch()方法捕获错误,并禁止重复跳转,例如:
// 在router.js中
const router = new VueRouter({
// ...
});
// 在路由导航前加入判断
router.beforeEach((to, from, next) => {
if (to.path === from.path) {
next(false); // 禁止重复跳转
} else {
next(); // 正常跳转
}
});
// 捕获NavigationDuplicated错误
router.onError((err) => {
if (err.name === 'NavigationDuplicated') {
console.log('重复路由跳转');
}
});
解决方案二:在Vue-Router中重写路由跳转方法
我们还可以通过Vue-Router提供的一个方法,来重写路由跳转方法,避免路由的重复跳转。具体实现如下:
import Vue from 'vue';
import Router from 'vue-router';
// 重写push方法
const originalPush = Router.prototype.push;
Router.prototype.push = function push(location) {
return originalPush.call(this, location).catch((err) => {
if (err.name === 'NavigationDuplicated') {
console.log('重复路由跳转');
}
});
};
Vue.use(Router);
const router = new Router({...})
上述代码中,我们通过重写Vue-Router原生的路由push()
方法,来避免重复路由跳转。调用push()
方法时,如果发生NavigationDuplicated
错误,我们就通过catch()
方法捕获并输出提示信息。
以上两种方案均可以有效解决Vue路由导航“NavigationDuplicated”报错的问题。
本文标题为:解决Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location
- JavaScript实现复选框全选功能 2023-12-01
- Ajax获取回调函数无法赋值给全局变量的问题 2023-02-15
- Vue中v-for key的使用注意事项 2023-10-08
- kkpager 实现ajax分页查询功能 2023-02-14
- AJAX实现注册验证用户名 2023-02-23
- CSS 实现 图片鼠标悬停折叠效果 2024-01-05
- 纯CSS实现鼠标移动切换图片示例 2024-01-05
- 如何使用CSS3画出一个叮当猫 2022-11-13
- VBScript编写Windows防止锁屏脚本程序 2023-12-24
- 使用AJAX实现分页 2023-02-01