【Vue2】NavigationDuplicated: Avoided redundant navigation to current location:xxxxx
翻译过来就是,导航重复:避免了到当前位置的冗余导航。
简单来说就是重复跳转了相同路径
原因
触发这种情况是因为vue-router中引入了primise,当传递了多次重复的参数就会抛出异常,而这种问题是只有编程式导航才会出现的,因为这个问题在声明式导航中已经在内部解决了这个问题。
解决方案
路由的push和replace都是VueRouter原型对象上的一个方法,所以每次路由跳转的时候都是通过这两个方法来实现,而这两个方法提供了三个参数,VueRouter.prototype.push(location,resolve,reject)分别是
- 包含了路由以及携带参数的
location - 成功失败回调
resolvereject
解决方案大致上就是两种,
- 一种是在
push | replace的时候传递成功与失败的回调来处理异常。
这种方式有一个缺点就是每次调用都需要传递成功与失败的回调有些麻烦。this.$router.push(
{ //第一个参数包含了路由跳转的一些信息 也就是router-link中的to,push方法中的location
name:"home",
params:{...},
query:{...}
},
($router)=>{}, //第二个参数是成功后的回调,可以通过第一个参数接收到$router对象
(err)=>{console.log(err)} // 第三个参数是失败后的回调,导航重复会在此处抛出异常
)
- 第二种是重写
VueRouter原型对象中的push | replace方法,通过在上面新增一个判断来处理程序抛出的异常信息。
这种方式修改过后再跳转路由就不需要再像第一种方式那样传递回调了//保存一份 push | replace 方法,方便接下来重写方法
let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace
// 重写push方法
VueRouter.prototype.push = function (location,resolve,reject){
if (resolve && reject){ //如果传入了resolve和reject两个回调,则正常执行原来的push方法
originPush.call(this,location,resolve,reject)
}else{ // 否则就执行指定的方法
originPush.call(this,location,($router)=>{},(err)=>{
console.log(err)
}} VueRouter.prototype.replace = function(...){...}
【Vue2】NavigationDuplicated: Avoided redundant navigation to current location:xxxxx的更多相关文章
- Vue Avoided redundant navigation to current location Error
这个报错的根源就是vue-router组件,错误内容翻译一下是: Avoided redundant navigation to current location === 避免冗余导航到当前位置 这个 ...
- vue-router 报错、:Avoided redundant navigation to current location 错误、路由重复
在用vue-router 做单页应用的时候重复点击一个跳转的路由会出现报错 这个报错是重复路由引起的只需在注册路由组建后使用下方重写路由就可以 const originalReplace = VueR ...
- Avoided redundant navigation to current location: "/users"
问题产生的原因:在Vue导航菜单中,重复点击一个菜单,即重复触发一个相同的路由,会报错,但不影响功能 解决:在router的配置文件中加入如下代码: const originalPush = Rout ...
- Vue 路由跳转报错 Error: Avoided redundant navigation to current location: "/XXX".
在router文件夹下的index.js中加入红色字体代码即可解决 import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(V ...
- Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to 解决办法
main.js 配置如下 import Router from 'vue-router'; //路由导航冗余报错(路由重复) const originalPush = Router.prototype ...
- 【vue2】(一)基础使用
[vue2](一)基础使用 MVVM MVVM: View - Model - ViewModel View: Dom层,视图层 Model: Plain JavaScript Objects,数据层 ...
- 【vue2】Style和Class,条件,列表渲染,双向数据绑定,事件处理
目录 1.style和class 2. 条件渲染 2.1 指令 2.2 案例 3. 列表渲染 3.1 v-for:放在标签上,可以循环显示多个此标签 3.2 v-for 循环数组,循环字符串,数字,对 ...
- 【JavaScript】获取当前页的URL与window.location.href
原文:http://blog.csdn.net/yongh701/article/details/45688743 版权声明:本文为博主原创文章,未经博主允许欢迎乱转载,标好作者就可以了!感谢欣赏!觉 ...
- 【转载】解决window.showModalDialog 模态窗口中location 打开新窗口问题
来源: <http://bibipear.blog.sohu.com/143449988.html> 在我们的项目中,通常会用到showModalDialog 打开一个模态的子窗口,但是在 ...
- 【Android】Field requires API level 4 (current min is 1): android.os.Build.VERSION#SDK_INT
刚遇到了这个问题: Field requires API level 4 (current min is 1): android.os.Build.VERSION#SDK_INT 解决方法: 修改 A ...
随机推荐
- go设置http代理
打算把之前python写的程序切换到golang, 结果调试时发现fiddler无法正常捕获go的http请求 需要设置代理才可以正常捕获 const HttpProxyUrl = "htt ...
- enobj.cn站有更新
1:整体样式 2:可以折叠app列表 3:手机端样式 4: Blog链接到博客园
- 《MySQL是怎样运行的》第八章小结
- Python gdal读取MODIS遥感影像并结合质量控制QC波段掩膜数据
本文介绍基于Python中GDAL模块,实现MODIS遥感影像数据的读取.计算,并基于质量控制QC波段进行图像掩膜的方法. 前期的文章Python GDAL读取栅格数据并基于质量评估波段QA对 ...
- 对于jsp页面中内嵌Java代码失败的解决方法(总是报出jsp类无法编译的错误)
准备好接收奥!解决方法来啦! 在我这几天查看了好几遍内嵌的Java代码之后,没有发现什么语法上面的错误,看来错误应该就是出现在环境上面了,或者是有什么我没有注意到的小细节.还好,终于将"罪魁 ...
- java数组排序及查找方法
前言 在上一篇文章中,壹哥给大家讲解了数组的扩容.缩容及拷贝方式.接下来在今天的文章中,会给大家讲解更重要的数组排序及查找方法.今天的内容会有点难,希望你不要因此而退缩,挺过这一关,你会向上突破的! ...
- Linux 多服务器时间同步设置
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间. 一.配置时间服务器具体步骤
- urlopen()方法的源代码
import urllib.request # 获取目标网址 url = 'https://www.baidu.com/' # 添加请求头 headers = {'User-Agent': 'Mozi ...
- [C++STL教程]6.bitset是什么?和bool有什么区别?零基础都能看懂的入门教程
之前我们介绍过vector, queue, stack,map,set,今天我们介绍另外一个stl容器:bitset. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通 ...
- Trie树结构
PrefixTree 208. 实现 Trie (前缀树) Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键.这一数据结构 ...