• Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: "/xxx". at createRouterError 的说明和解决


    错误说明

    Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: "/xxx". at createRouterError
    这个错误是说着在promise里捕获了一个导航的重复定义,因为这里是使用编程式导航去进行路由跳转的,$router.push方法会返回一个promise对象。在这里重复的push了同一个路由地址,所以就报了这个错误。
    有时也会报这个错Uncaught (in promise) Error: Navigation cancelled from "/xxx" to "/xxx" with a new navigation

    具体例子可看下面。

    错误定位

    <template>
      <div @click="toDetail(item.articleId)">
        <el-button @click="toDetail(item.articleId)">阅读</el-button>
      </div>
    </template>
    
    <script>
    export default{
      methods:{
        toDetail(id) {
          this.$router.push({ name: 'detail', params: { articleId: id } })
        }
      }
    }
    </script>
    

    因为el-button是在div里的,所按钮点击的时候会有两个click都调用了相同的push

    错误解决

    方法一

    把嵌套的子元素中的触发路由的事件去掉,这里把el-button中的click去掉就行了。

    方法二

    因为这个错误是在push中抛出的,所以在其中捕获catch这个错误就行了,不过这似乎是个治标不治本的办法,所有在push中的错误都可以用此法捕获。
    在路由中,添加如下代码进行配置:

    import Vue from 'vue'
    import VueRouter from 'vue-router'
    
    Vue.use(VueRouter)
    
    // 捕获push replace中的错误
    // 当然在replace中的错误也是可以相同的进行捕获
    const originalPush = VueRouter.prototype.push
    const originalReplace = VueRouter.prototype.replace
    // push
    VueRouter.prototype.push = function push(location, onResolve, onReject) {
      if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
      return originalPush.call(this, location).catch(err => err)
    }
    // replace
    VueRouter.prototype.replace = function push(location, onResolve, onReject) {
      if (onResolve || onReject) return originalReplace.call(this, location, onResolve, onReject)
      return originalReplace.call(this, location).catch(err => err)
    }
    
  • 相关阅读:
    018_STM32程序移植之_串口接收中文
    003_软件安装之_Visual Studio 2012
    001_C#我的第一个串口上位机软件
    017_STM32程序移植之_AS608指纹模块
    016_STM32程序移植之_舵机
    015_STM32程序移植之_NRF24L01模块
    014_STM32程序移植之_L298N电机驱动模块
    002_89C52_Proteus_DAC0832_输出50HZ,正弦波,三角波,矩形波,锯齿波
    001_89C52之_Proteus_ADC0809采集电压
    001_电子工程师招聘笔试题及详细解析
  • 原文地址:https://www.cnblogs.com/flytree/p/14669009.html
Copyright © 2020-2023  润新知