发现当动态修改当前页面的url中的query时会报错

是因为新创建的路由不能使用老路由的对象,而应该重新创建一个对象,以解决问题

报错内容

新老路由发生重复,停止跳转

解决方法

// 首先获取当前url
const q = this.$route && this.$route.query
// 通过创建新的路由的方式来添加参数
this.$router.push({ query: Object.assign({ filename: '' }, q) })

原因

  • 查看Vue-Router的源码,发现其判断的是新老query对象是否完全一致。

  • 而当通过直接修改$route.query去变化页面的时候,将会使得老的query对象也会跟着一起改变,于是就会被报路由重复

  • Vue-Router的源码中关于新老的判断

    • function isSameRoute (a, b, onlyPath) {if (b === START) {return a === b} else if (!b) {return false} else if (a.path && b.path) {return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||a.hash === b.hash &&isObjectEqual(a.query, b.query))} else if (a.name && b.name) {return (a.name === b.name &&(onlyPath || (a.hash === b.hash &&isObjectEqual(a.query, b.query) &&isObjectEqual(a.params, b.params))))} else {return false}
      }
      
  • 关于路由更新的逻辑

    • if (isSameRoute(route, current) &&// in the case the route map has been dynamically appended tolastRouteIndex === lastCurrentIndex &&route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]) {this.ensureURL();if (route.hash) {handleScroll(this.router, current, route, false);}return abort(createNavigationDuplicatedError(current, route))}
      
    • abort(createNavigationDuplicatedError(current, route))处弹出报错

实战实例

<script>
mounted () {const q = this.$route && this.$route.queryconst fn = q && q.filenameif (fn) {this.fileName = fnthis.component = 'Viewer'} else {this.component = 'Editor'if (q.filename === undefined) { this.$router.push({ query: Object.assign({ filename: '' }, q) }) }}}
</script>

Vue-Router给当前url添加参数时报错 Navigation Duplicated Avoided redundant navigation to current location相关推荐

  1. 四种解决Vue中重复点击相同路由控制台报错问题( Avoided redundant navigation to current location)

    vue-router 升级到3.1.x 后,重复点击导航时,控制台出现报错 ,虽然不影响功能使用,但是看的就不舒服. 报错信息 Uncaught (in promise) NavigationDupl ...

  2. 前端开发:Vue项目报错NavigationDuplicated:Avoided redundant navigation to current location:“/XXX”的解决方法

    最近在Vue项目开发的过程中遇到一个问题,那就是在点击同一个路由操作的时候,控制台会报一下错误提示: Uncaught (in promise) NavigationDuplicated: Avoid ...

  3. vue ui 创建项目 ,添加样式时报错,通过vue ui安装less-loader 和less 依赖后报错,百度告诉说版本太高导致

    vue ui 安装依赖时,无法选择指定版本,所以,解决办法有两个,第一个用vue ui卸载安装的less-loader 和 less依赖, 第二个使用命令行卸载安装的less-loader 和 les ...

  4. 向当前url添加参数

    //向当前url添加参数,没有历史记录window.history.replaceState({path: newurl}, '', newurl);function updateQueryStrin ...

  5. php接受post值报错,php接收post参数时报错怎么办

    php接收post参数时报错的解决办法:首先搜索[php.ini]中 [always_populate_raw_post_data ]:然后将前面的[;]去掉,并重启服务即可. php接收post参数 ...

  6. Vue的router导航重复-报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to curren

    报错: Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: &q ...

  7. SAP se11透明表添加字段时报错:字段级的结构更改(转换表xxxxxx)

    SAP se11透明表添加字段时报错:字段级的结构更改(转换表xxxxxx) 由于忘记添加集团这个字段,后续补上爆出的错误. 查看报错信息发现目前的透明表结构和原有的透明表结构字段不一致导致的. 这个 ...

  8. vue父组件往子组件传值时报错Property or method 选择操作人 is not defined on the instance but referenced during rende

    vue父组件往子组件传值时报错Property or method "选择操作人" is not defined on the instance but referenced du ...

  9. 解决Vue报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location

    问题描述:重复点击导航时,控制台出现报错 ,虽然不影响功能使用,但也不能坐视不管. 解决 Vue 重复点击相同路由,出现 Uncaught (in promise) NavigationDuplica ...

  10. Vue-Router 路由重复点击时报错 Uncaught (in promise) NavigationDuplicated:Avoided redundant navigation to curr

    前言 总结一下,在项目中遇到的一个小问题,使用 Vue 构件的项目里,有时候会存在 重复点击路由 报错的问题,Uncaught (in promise) NavigationDuplicated:Av ...

最新文章

  1. @scheduled cron动态修改_spring boot实现动态增删启停定时任务
  2. 关于 redis、memcache、mongoDB 的对比
  3. python爬虫面试问题_Python爬虫面试总结
  4. 矩形脉冲信号的_IQ信号的解调学习
  5. ubuntu18.0.4 不能下载 libgd2-dev(ubuntu 20.04 安装perl 中GD 模块失败的解决办法)
  6. BAT大牛这样搞Python,真是绝了
  7. GreenDao 工具类 --- 使用 Json 快速生成 Bean、表及其结构,炒鸡快!
  8. hdu acm 1540
  9. Web聊天室历史记录解决方案(轻喷。。)
  10. Mac OS 内存管理知识
  11. Win7 开启自带WIFI进行手机抓包
  12. Android 宏病毒,xls宏病毒,程序不落地创建傀儡进程实现远控
  13. niosii spi 外部_niosii 的SPI详解
  14. js统计html页面访问的次数,JavaScript实现网站访问次数统计代码
  15. 号称“不限速“的阿里网盘,官宣要停止了,寿命仅仅1年
  16. 六款最佳、免费的网络延迟测试工具
  17. Excel批量合并相同内容单元格操作——WPS太秀了
  18. 快应用官网 | 2020年端午假期工作安排
  19. 《孙子兵法作战指挥之虚实篇》
  20. 组织结构图模板分享,在线绘制组织结构图

热门文章

  1. python监听鼠标键盘_python用pynput监听控制键盘鼠标
  2. 中山西路620号 的人才服务中心搬到 梅园路77号去了
  3. Anaconda基本教程及常用命令(介绍、安装、基本操作、管理环境、管理包、conda和pip以及借助pqi换源)
  4. linux 命令:du 详解
  5. React Suspense lazy
  6. 网络硬件常识:光模块
  7. 《数据结构》-树(孩子兄弟表示法)
  8. ubuntu 使用 egl
  9. 需求:世界最高峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够打的纸,它的厚度是0.1毫米 请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
  10. AV1编解码器的编译使用