Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location解决方法

news2025/7/12 18:44:03

点击vue路由跳转,控制台报错:Avoided redundant navigation to current location: “/xxxxxx“解决方法

一、描述问题

在使用this.$router.push跳转页面时候,重复点击菜单引起路由重复报错

比如当前页面显示区是路由组件‘/cats’,重复点击按钮进行this.$router.push跳转,要跳转的组件仍然是‘/cats’,那么控制就会报如下错误:

在这里插入图片描述

二、报错原因

由于 vue-router3.0 及以上版本回调形式改成Promise API的形式了,返回的是一个Promise 。也是说 push和replace都是Promise类型了。

而Promise的回调函数resolve和reject,必须传其中一个,否则会报错。如果路由地址跳转相同,且没有捕获到错误,控制台始终会出现上图所出现的问题。​

三、解决方法

1、安装vue-router3.0以下版本

先卸载3.0以上版本然后再安装旧版本

npm i @vue-router2.8.0

2、为每一个Promise添加一个回调函数

缺点:每个路由跳转都要添加回调函数

this.$router.push({
   name: 'Cats',
 }, () => {})

3、修改VueRouter原型对象上的push/replace方法

在router/index.js文件中添加如下代码

// 获取原型对象push函数
const originalPush = VueRouter.prototype.push

// 获取原型对象replace函数
const originalReplace = VueRouter.prototype.replace

// 修改原型对象中的push函数
VueRouter.prototype.push = function push(location){
return originalPush.call(this , location).catch(err=>err)
}

// 修改原型对象中的replace函数
VueRouter.prototype.replace = function replace(location){
return originalReplace.call(this , location).catch(err=>err)
}

四、原理分析

const originalReplace = VueRouter.prototype.replace

VueRouter.prototype.replace = function replace(location){
return originalReplace.call(this , location).catch(err=>err)
}

location :一个保存了当前要跳转路径的对象;

call()函数:可以在调用函数的同时改变this的指向,常用于实现继承,
两个参数:
this:由于call处于原型对象内部,所以此处this指向的是当前VueRouter的实例对象;而originalPush指向的是VueRouter.prototype.push,旨在于调用当前VueRouter实例对象中的push方法;
location:在方法调用时传入获取到的location。

catch:链式调用catch方法,目的是在方法执行时,捕获错误。
在js机制中,catch捕获到Exception时,代码还会继续向下执行。所以此处的catch未作任何操作,代码也会继续向下执行,和抛给浏览器的错误其实时一致的

五、额外补充

1、路由导航方式

声明式编程式
<router-link :to="..."> $router.push(...)

编程式导航:即 $router.push$router.replace$router.forward()$router.back()$router.go()

2、Promise函数

① Promise是一个构造函数
可以使用new 创建一个Promise实例 //eg:const p = new Promise()
每一个Promise实例对象代表一个异步操作

② Promise.prototype上包含一个.then()方法
每一个new Promise()构造函数得到的实例对象都可以通过原型链的方式访问到.then()方法 //eg:p.then()

③ .then()方法用来预先指定成功或失败的回调函数
p.then(成功回调,失败回调)
调用.then()方法时,成功的回调函数是必选的,失败回调是可选的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于js 中 try catch用法

try…catch语法&#xff0c;简单来说就是用来捕获异常的&#xff0c;我就简述一下我遇到的问题 当使用vuex在actions发请求时&#xff0c;这个接口不仅可以添加购物车数据&#xff0c;同时也可更新产品的数量&#xff0c;我就在更新产品数量的地方出现了问题&#xff0c; 先说说…

HTML生日快乐-生日祝福(烟花+粒子动画)

本人对前端不太了解&#xff0c;对网上代码进行简单修改&#xff0c;完成部署。 粒子动画&#xff1a;https://github.com/kennethcachia/shape-shifter 烟花&#xff1a;网上有许多相关代码&#xff0c;未找到原作者 效果&#xff1a;http://8.130.106.21/HappyBirthday/Happy…

原生HTML+CSS+JS制作自己的导航主页(前端大作业,源码+步骤详解)

文章目录前言一、插入背景二、头部1.导航栏2. 优化导航栏3 时间4. 搜索框三、主体四、底部五、背景泡沫球特效六、note小便签七、全部代码1. index.html2. style.css3. index.js八、总结链接&#xff1a;https://pan.baidu.com/s/1uaRCJXyIrY56NXabau4wjw?pwdLDL6 提取码&…

Vue3详细教程

一.Vue3的介绍 相信大家都已经学习过Vue2了&#xff0c;对Vue有了一定的了解。那么今天我们就一起来学习有关Vue3的知识点。那为什么要学习Vue3呢&#xff0c;主要是他有以下的特点。 &#xff08;1&#xff09;新增组合式api &#xff08;2&#xff09;更加接近原生 &#xf…

JavaWeb web.xml配置详解

参考&#xff1a; XML 教程Java web之web.xml配置详解 Javaweb三大组件是&#xff1a;Servlet&#xff0c;Filter&#xff0c;Listener。 1、Servlet Servlet作为中转处理的容器&#xff0c;连接了客户端和服务器端的信息交互和处理。2、Filter 拦截用户请求&#xff0c;在服…

tomcat下载安装及配置教程

之前选择的版本是tomcat 10.0按照下面流程走了一遍&#xff0c;发现一直是未发现&#xff08;Not Found&#xff09;的状态。 后来&#xff0c;我换成了tomcat 9版本就OK了 下面以tomcat 9.0版本为例讲述其过程 一、下载Tomcat及解压 官网&#xff1a; http://tomcat.apach…

Vue基础知识总结 9:vue webpack打包原理

&#x1f345; 作者简介&#xff1a;哪吒&#xff0c;CSDN2021博客之星亚军&#x1f3c6;、新星计划导师✌、博客专家&#x1f4aa; &#x1f345; 哪吒多年工作总结&#xff1a;Java学习路线总结&#xff0c;搬砖工逆袭Java架构师 &#x1f345; 关注公众号【哪吒编程】&#…

解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.

在安装配置node时&#xff0c;cmd检查node没问题 但是检查npm就出现npm warn config global --global, --local are deprecated. use --locationglobal instead.的报警 问题出现在&#xff0c;以前版本npm的命令一般时XXX -g 但是随着版本更替&#xff0c;这个老方法被弃用了&a…

详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia)

vite创建vue3ts项目 为何选择vite&#xff1a; vite 是一个基于 Vue3 单文件组件的非打包开发服务器&#xff0c;它做到了本地快速开发启动&#xff1a; 快速的冷启动&#xff0c;不需要等待打包操作&#xff1b; 即时的热模块更新&#xff0c;替换性能和模块数量的解耦让更新…

uniapp中自定义导航栏

相信很多小伙伴在使用uniapp进行多端开发的时候呢&#xff0c;在面对一些奇葩的业务需求的时候&#xff0c;uniapp给我们提供的默认导航栏已经不能满足我们的业务需求了&#xff0c;这个时候就需要我们自己自定义导航栏使用啦。 当然uniapp也给我们提供了很多的自定义导航栏的…

开箱即用,这些 Vue3 后台管理系统模板绝对让你爽歪歪!

原文链接&#xff1a;Vue3 后台管理系统模板推荐。 之前写了一篇关于 Vue2 的后台管理系统模板的推荐&#xff0c;详情请见 Vue后台管理系统模板推荐。 Vue3 在今年2月份已成为新的默认版本&#xff0c;本文收集了一些 Vue3 的后台管理系统模板&#xff0c;分享给在座的仌 &am…

web前端面试题(必背面试题)

必背面试题-手写题 前端面试&#xff08;手写题&#xff09;_Z_Xshan的博客-CSDN博客 css系列 面试官&#xff1a;说说你对盒子模型的理解 一、是什么 所有元素都可以有像盒子一样的平面空间和外形 一个盒子由四部分组成&#xff1a;context ,padding,margin,border con…

Django web开发(一) - 前端

文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和span2.5 超链接2.6 图片小结标签的嵌套2.7 列表2.8 表格2.9 input系列2.10 下拉框2.11 多行文本用户注册案例: 用户注册GET 方式POST 方式表单数据提交优化3.CSS样式3.1 快速上手3.2 CSS应用方式1. 在标…

小程序生命周期

小程序的生命周期说白了就是指程序从创建、到开始、暂停、唤起、停止、卸载的过程。 我们大概从三个角度看一下小程序的生命周期。 &#xff08;1&#xff09;&#xff1a;应用生命周期 &#xff08;2&#xff09;&#xff1a;页面生命周期 &#xff08;3&#xff09;&…

Threejs入门教程

一、本地搭建Threejs官方文档网站 1.官网地址&#xff1a;https://github.com/mrdoob/three.js 下载压缩包并解压或使用git clone 若github过慢&#xff0c;则使用gitee对应网址&#xff1a;three.js: mrdoob/three.js 同步库 2.目录解析 3.启动方式 在three.js项目根目录下…

Vue中created和mounted详解

目录 一、生命周期概念 二、浏览器渲染过程 三、生命周期中的浏览器渲染 beforeCreate阶段 created阶段 beforeMount阶段 mounted阶段 四、使用场景 五、常见相关问题 一些页面跳转后, 一些基础数据接口没有重新请求 一、生命周期概念 通俗地讲&#xff0c;生命周期即Vue实例或…

vite.config.js详细配置。

Vue3vite vite和webpack区别&#xff1f; 1.vite服务器启动速度比webpack快&#xff0c;由于vite启动的时候不需要打包&#xff0c;也就无需分析模块依赖、编译&#xff0c;所以启动速度非常快。当浏览器请求需要的模块时&#xff0c;再对模块进行编译&#xff0c;这种按需动态…

Vue-cli(vue脚手架)上万字总结,超详细教程

1、创建Vue脚手架 1.1、首先系统需要全局安装Vue脚手架 npm install -g vue/cli 1.2、创建Vue脚手架工程 进入你想创建vue脚手架的目录&#xff0c;然后输入命令 vue create xxx项目名 需要注意的是工程名字不能大写&#xff0c;这里我们选择选择Vue2&#xff0c;敲下回车&am…

Java实现Token登录验证(基于JWT的token认证实现)

文章目录 一、JWT是什么&#xff1f;二、使用步骤 1.项目结构2.相关依赖3.数据库4.相关代码 三、测试结果 一、JWT是什么&#xff1f; 在介绍JWT之前&#xff0c;我们先来回顾一下利用token进行用户身份验证的流程&#xff1a; 1、客户端使用用户名和密码请求登录 2、服务端…

【微信小程序】view和scroll-view组件的基本使用

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;微信小程序 &#x1f4ac;个人格言&#xff1a;但行好事&#xff0c;莫问前程 view和scroll-vie…