位置: IT常识 - 正文

vue-router控制台异常:Uncaught (in promise) Error: Redirected when going from “/“ to “/foo“(vue router)

编辑:rootadmin
vue-router控制台异常:Uncaught (in promise) Error: Redirected when going from “/“ to “/foo“

推荐整理分享vue-router控制台异常:Uncaught (in promise) Error: Redirected when going from “/“ to “/foo“(vue router),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue$router,vue routerview,vue routerlink,vue$router,vue路由控制,vue $route,vue$router,vue$router,内容如对您有帮助,希望把文章链接给更多的朋友!

qian kun微前端在子应用的路由配置中添加了一个全局前置导航守beforeEach,在前置导航守卫中调用next方法时重写了路由的path,结果控制台每次在路由跳转时都会报异常,但是不影响功能。 这里,我们将这个场景从微前端摘出来,如果在前置导航守卫中以下面这种方式使用next方法就会抛异常

router.beforeEach((to, from, next) => { if (to.path !== '/' && !to.path.includes('/target')) { // 在跳转其他路由的时候,覆盖原来的 path 添加前缀 next({ ...to, path: '/target' + to.path, replace: true, }) } else { next(false); }})

先给一下解决这个异常的方法,后文会进一步分析:

1. 降低一下vue-router的版本,使用 < 3.1.0 的版本

vue-router控制台异常:Uncaught (in promise) Error: Redirected when going from “/“ to “/foo“(vue router)

2. 使用catch捕获这个异常,在调用this.$router.push的时候catch或者传入第二个参数

this.$router.push({ path: '/foo',}).catch(err=>{})

3. 如果每次调用push方法都要catch比较麻烦, 可以重写VueRouter原型上的push方法

const originalPush = VueRouter.prototype.pushVueRouter.prototype.push = function (location, onComplete, onAbort) { if (!onComplete && !onAbort && typeof Promise !== 'undefined') { return originalPush.call(this, location, onComplete, onAbort).catch(err => { }) } else { // <router-link>进行路由跳转时,传了一个oncomplate方法 originalPush.call(this, location, onComplete, onAbort) }}

查找一下报异常的原因,网上有说这个异常,是调用push方法的时候抛出的,看一下这个push方法源码,功力不够,一眼看上去并没有发现什么端倪 注:vue-router.js的源码可以在vue-router源码的dist目录中找到

然后看一下控制台的错误,复制一部分的错误信息Redirected when going from在vue-router.js源码中搜索一下 原来这个错误是通过这个方法生成的,继续搜索createNavigationRedirectedError,这个hook会在beforeEach的时候调用,next也就是hook的第三个参数 当next传入的是路径(包含String,或者location路由对象)跳转到一个不同的路径时,就会生成这个异常,然后传递给abort方法,在abort方法中会调用onAbort方法。继续搜索confirmTransition,可以找到transitionTo方法,而$router的push方法会调用transitionTo方法,最终会定位到onAbort方法的真身在push方法中。

如果我们使用this.$router.push跳转路由,不传入onAbort方法,push方法传递给transitionTo方法的onAbort参数是promise中的reject方法。

而promise抛出了错误有没有使用catch进行捕获,就会在控制台中报异常Uncaught (in promise) Error,方法2、3的来源就是捕获promise的异常。 上面我们找到一个 < 3.1.0 版本的vue-router,看一下这个push方法,并没有使用promise,所以切换之前的版本就不会抛出异常了。

总结一下,在查找这个问题的过程中还是走了弯路,如果熟悉Promise的话,在第一步push的代码中就能发现猫腻;并且在vue-router的GitHub中issue和版本说明中也有这个控制台异常的记录,以后还是多看看GitHub能更快找到问题的根源

本文链接地址:https://www.jiuchutong.com/zhishi/287060.html 转载请保留说明!

上一篇:fetch的基本用法、请求参数及响应结果(fetchall的用法)

下一篇:fsma32.exe进程是什么文件 fsma32是什么进程

  • 实战软文发布推广(软文 发布)

    实战软文发布推广(软文 发布)

  • 月入上千的游戏试玩赚钱技巧(月入过万的手游)

    月入上千的游戏试玩赚钱技巧(月入过万的手游)

  • 打印机保修期是多长时间(打印机的保修期)

    打印机保修期是多长时间(打印机的保修期)

  • 苹果13.4.1加了什么功能(苹果升级13.4)

    苹果13.4.1加了什么功能(苹果升级13.4)

  • pr cs6是哪一年的版本(prcs6是哪一年发布)

    pr cs6是哪一年的版本(prcs6是哪一年发布)

  • 美团顺风车开通城市(美团顺风车司机注册)

    美团顺风车开通城市(美团顺风车司机注册)

  • 保存演示文稿的快捷键(保存演示文稿的软件)

    保存演示文稿的快捷键(保存演示文稿的软件)

  • 快手小黄车支持无理由退换吗(快手小黄车支持花呗吗)

    快手小黄车支持无理由退换吗(快手小黄车支持花呗吗)

  • ipad更新到几代了(苹果ipad更新换代时间)

    ipad更新到几代了(苹果ipad更新换代时间)

  • 尾注和交叉引用的区别(尾注交叉引用怎么设置[1])

    尾注和交叉引用的区别(尾注交叉引用怎么设置[1])

  • 宽带los灯不亮正常吗(宽带猫los灯不亮是什么意思)

    宽带los灯不亮正常吗(宽带猫los灯不亮是什么意思)

  • mac地址会变吗(手机mac地址会变吗)

    mac地址会变吗(手机mac地址会变吗)

  • 手机不能安装微信是什么原因(一个手机怎么安装两个微信)

    手机不能安装微信是什么原因(一个手机怎么安装两个微信)

  • 华为荣耀v30pro支持防水吗(华为荣耀v30pro支持多少瓦快充)

    华为荣耀v30pro支持防水吗(华为荣耀v30pro支持多少瓦快充)

  • vivo怎样设置软件密码(vivo怎样设置软件自动更新)

    vivo怎样设置软件密码(vivo怎样设置软件自动更新)

  • 华为p30后盖标签能撕吗(华为p30后盖标签在哪)

    华为p30后盖标签能撕吗(华为p30后盖标签在哪)

  • 苹果拦截短信在哪里找(苹果拦截短信在哪里取消)

    苹果拦截短信在哪里找(苹果拦截短信在哪里取消)

  • 小米9可以反向充电吗(小米9反向充电可以给苹果充电吗)

    小米9可以反向充电吗(小米9反向充电可以给苹果充电吗)

  • word文档怎么将文字竖排(word文档怎么将文字转换成表格)

    word文档怎么将文字竖排(word文档怎么将文字转换成表格)

  • 存储容量1 gb等于多少(存储容量1 gb等于什么)

    存储容量1 gb等于多少(存储容量1 gb等于什么)

  • ppt 超链接 回到目录(ppt超链接回到指定的文字)

    ppt 超链接 回到目录(ppt超链接回到指定的文字)

  • 抖音怎么上商品橱窗(抖音怎么上商品类目)

    抖音怎么上商品橱窗(抖音怎么上商品类目)

  • 知乎收藏夹怎么设置隐私(知乎收藏夹怎么删)

    知乎收藏夹怎么设置隐私(知乎收藏夹怎么删)

  • 6sp视频对方听不到声音(6sp打视频对方听不见我说话)

    6sp视频对方听不到声音(6sp打视频对方听不见我说话)

  • win10与win7怎样组建局域网(win10电脑和win7电脑怎么共享文件)

    win10与win7怎样组建局域网(win10电脑和win7电脑怎么共享文件)

  • 2022年数学建模国赛c题论文+代码(附详解)(2022年数学建模获奖结果)

    2022年数学建模国赛c题论文+代码(附详解)(2022年数学建模获奖结果)

  • 如何理解递延所得税费用的计算公式
  • 合伙企业的税收优势
  • 公司没有收入怎么报销
  • 员工工资计入管理费用吗
  • 研发费用资本化支出
  • 企业职工保险如何转灵活就业
  • 善意接受虚开发票只能自认倒霉么
  • 红字发票票据怎么处理
  • 在分公司关闭过程中,资产损失怎么申报扣除
  • 汇票和支票的区别是什么
  • 异常增值税扣税凭证
  • 在建工程当中哪些是资产
  • 不能抵扣的普通发票
  • 汽车销售公司购进车辆怎么做账
  • 去年的定额的发票可以报销吗?
  • 出口退税可以不申报是否需要缴纳增值税
  • 购买软件的增值税可以抵扣吗
  • 小企业会计准则科目
  • 月收入不超10万减免 具体分销售额吗
  • 母子公司合并报表什么时候做
  • 中国每年森林火灾造成的损失
  • 应付账款借方余额怎么平账
  • linux系统怎么关闭端口
  • linux 中cat
  • 旅游公司广告费支出扣除标准
  • 没有发票申报纳税怎么办
  • 误餐费怎么入账
  • 硬件设施不完备
  • win10excel闪退是什么原因
  • 减免的税款还用做分录吗
  • 教育发展基金计提比例
  • 担保公司代偿账户是什么
  • laravel实战教程
  • 私人医院需要缴纳哪些税费
  • anaconda卸载干净
  • 为什么说网络安全靠人民
  • 命令who的含义
  • 利润表的本月数怎么算
  • 银行利息增值税发票
  • CentOS6.9下mysql 5.7.17安装配置方法图文教程
  • mongo 更新数据
  • 无票收入如何报税
  • 收购企业怎么做账
  • 长期债权投资业务处理
  • 固定资产升级账务处理
  • 母子公司吸收合并的税收有哪些
  • 社保年审流程示意图
  • 国库券利息收入属于企业所得税纳税调整项目
  • 上期有留抵进项税额,本期如何申报
  • 完整的会计核算流程
  • 金蝶软件中怎么让以前年度损益调整在利润表中取不到数
  • 以前年度损益调整怎么做账
  • 离职补偿金的计算基数
  • 失业人员的养老金
  • 已经入库的商品出库了要怎么做会计分录
  • 自产自销免税发票可以抵税吗
  • 什么叫零售差额退税
  • 交上年企业所得税怎么做会计分录
  • 营改增后建筑业税率变化情况
  • mysql常用功能
  • 自己的磁盘
  • win10系统开机密码设置方法
  • win7系统怎么看wi-fi密码
  • win7系统不能安装到此磁盘
  • win8.1截图工具快捷键
  • win7共享失败
  • linux常用桌面环境
  • 卸载安装软件
  • 安卓沉浸式状态栏框架
  • 用python进行翻译
  • pycharm远程调试代码
  • js定义数字
  • javascript用处
  • js中dom的用法
  • js数组的操作指令有哪些
  • 青岛税税通怎么切换企业
  • 广东电子税务局中山税务局网
  • 代理业如何缴纳印花税
  • 供热用地规划指标
  • 四季度预缴申报表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设