翻译过来就是,导航重复:避免了到当前位置的冗余导航。
简单来说就是重复跳转了相同路径

原因

触发这种情况是因为vue-router中引入了primise,当传递了多次重复的参数就会抛出异常,而这种问题是只有编程式导航才会出现的,因为这个问题在声明式导航中已经在内部解决了这个问题。

解决方案

路由的pushreplace都是VueRouter原型对象上的一个方法,所以每次路由跳转的时候都是通过这两个方法来实现,而这两个方法提供了三个参数,VueRouter.prototype.push(location,resolve,reject)分别是

  • 包含了路由以及携带参数的location
  • 成功失败回调 resolve reject

解决方案大致上就是两种,

  1. 一种是在 push | replace 的时候传递成功与失败的回调来处理异常。
    这种方式有一个缺点就是每次调用都需要传递成功与失败的回调有些麻烦。
    this.$router.push(
    { //第一个参数包含了路由跳转的一些信息 也就是router-link中的to,push方法中的location
    name:"home",
    params:{...},
    query:{...}
    },
    ($router)=>{}, //第二个参数是成功后的回调,可以通过第一个参数接收到$router对象
    (err)=>{console.log(err)} // 第三个参数是失败后的回调,导航重复会在此处抛出异常
    )
  2. 第二种是重写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的更多相关文章

  1. Vue Avoided redundant navigation to current location Error

    这个报错的根源就是vue-router组件,错误内容翻译一下是: Avoided redundant navigation to current location === 避免冗余导航到当前位置 这个 ...

  2. vue-router 报错、:Avoided redundant navigation to current location 错误、路由重复

    在用vue-router 做单页应用的时候重复点击一个跳转的路由会出现报错 这个报错是重复路由引起的只需在注册路由组建后使用下方重写路由就可以 const originalReplace = VueR ...

  3. Avoided redundant navigation to current location: "/users"

    问题产生的原因:在Vue导航菜单中,重复点击一个菜单,即重复触发一个相同的路由,会报错,但不影响功能 解决:在router的配置文件中加入如下代码: const originalPush = Rout ...

  4. Vue 路由跳转报错 Error: Avoided redundant navigation to current location: "/XXX".

    在router文件夹下的index.js中加入红色字体代码即可解决 import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(V ...

  5. Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to 解决办法

    main.js 配置如下 import Router from 'vue-router'; //路由导航冗余报错(路由重复) const originalPush = Router.prototype ...

  6. 【vue2】(一)基础使用

    [vue2](一)基础使用 MVVM MVVM: View - Model - ViewModel View: Dom层,视图层 Model: Plain JavaScript Objects,数据层 ...

  7. 【vue2】Style和Class,条件,列表渲染,双向数据绑定,事件处理

    目录 1.style和class 2. 条件渲染 2.1 指令 2.2 案例 3. 列表渲染 3.1 v-for:放在标签上,可以循环显示多个此标签 3.2 v-for 循环数组,循环字符串,数字,对 ...

  8. 【JavaScript】获取当前页的URL与window.location.href

    原文:http://blog.csdn.net/yongh701/article/details/45688743 版权声明:本文为博主原创文章,未经博主允许欢迎乱转载,标好作者就可以了!感谢欣赏!觉 ...

  9. 【转载】解决window.showModalDialog 模态窗口中location 打开新窗口问题

    来源: <http://bibipear.blog.sohu.com/143449988.html> 在我们的项目中,通常会用到showModalDialog 打开一个模态的子窗口,但是在 ...

  10. 【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 ...

随机推荐

  1. 10.Java中Map的entrySet() 详解以及用法

    一.Map.entry是什么? Map是java中的接口,Map.Entry是Map的一个内部接口. 此接口为泛型,定义为Entry<K,V>.它表示Map中的一个实体(一个key-val ...

  2. pytest之运行环境

    简介 pytest是Python最流程化的单元测试框架,它具有允许直接使用assert进行断言,而不需要使用self.assert*:可以自动寻找单测文件.类和函数,还可支持执行部分用例:Modula ...

  3. Python项目案例开发从入门到实战 - 书籍信息

    Python项目案例开发从入门到实战 - 爬虫.游戏和机器学习(微课版) 作者:郑秋生 夏敏捷 清华大学出版社 ISBN:978-7-302-45970-5

  4. gRPC之.Net6中的初步使用说明

    1.介绍 GRPC是一个高性能.通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发,支持众多的开发语言,由Google开源. gRPC也是基于以下 ...

  5. Linux & 标准C语言学习 <DAY2>

    vim文本编辑器:     可以直接在终端下采用纯键盘操作的一款文本编辑器,号称编辑器之神,可以二次升级.可以扩展     基础用法:         1.进入vim:             输入 ...

  6. 17.explicit关键字

    c++提供了关键字explicit,禁止通过构造函数进行的隐式转换.声明为explicit的构造函数不能在隐式转换中使用. [explicit注意] ● explicit用于修饰构造函数,防止隐式转化 ...

  7. DIYAUDIO LM3886空板、套件、成品机DIY

    diyaudio 3886空板,3886纯后级功放板.最后三张图为成品板子演示图.正确安装后,没有底噪.大水塘电容直径最大35MM.本人已经用这快板子制作了多台成品机,用过的都说好!空板20元,全部1 ...

  8. JS中关于原型对象与原型链的理解!

    1.首先我们先来看一张图 prototype 每个函数都有一个 prototype 属性每一个JavaScript对象(null除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每 ...

  9. js循环中reduce的用法简单介绍

    reduce() 方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(上一次回调的返回值),当前元素值,当前索引 ...

  10. 由 Base64 展开的知识探讨

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值.. 本文作者:霜序(掘金) 前言 在我们的业务应用中越来越多的应用到编 ...