当使用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
基础教程推荐
- vue前端防止按钮在短时间内多次点击 2023-10-08
- Django框架利用ajax实现批量导入数据功能 2022-12-15
- css 浮动(float)页面布局(下) 2023-12-23
- 详解微信小程序应用和页面生命周期 2022-10-21
- 活到老学到老学习AJAX跨域(三) 2022-12-15
- 细数Ajax请求中的async:false和async:true的差异 2023-01-26
- 黑客帝国特效(html+css+js) 2023-10-28
- 纯html+css实现奥运五环的示例代码 2022-09-21
- js获取最近一周一个月三个月时间的简单示例 2023-08-12
- javascript实现的网站访问量统计代码 2024-01-04