位置: 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是什么进程

  • 已申报税额和已缴纳税额
  • 收取商标权使用费分录
  • 增值税发票注明金额是含税还是不含税
  • 土地增值所得需交什么税
  • 认缴制投资方的账务处理
  • 房地产开发企业预收款预缴增值税
  • 主营业务收入计入什么明细账
  • 未确认收入可以开发票吗
  • 公司发放节日礼品
  • 旧税号开出的发票能认证抵扣吗?
  • 股权交易要不要缴纳印花税?
  • 关于增值税发票开具的最新规定
  • 某公司为了更好的开展业务
  • 零申报还需要交税吗
  • 企业购买理财产品的会计分录
  • 税基式减免的内容有哪些?
  • 非营利组织免税收入孳生的银行存款利息
  • 土地转让应交税费
  • 什么情况下出租人可以解除合同
  • 电脑店u盘装系统步骤
  • win10鼠标速度默认是多少
  • hppusg.exe是什么进程
  • 建筑工程给排水的内容
  • 公司出租房屋租金由承租方本人支付
  • 厂房押金收据范本
  • 债务担保是什么意思
  • 长期借款利息和短期借款利息都应计入财务费用
  • hp workwise service是什么
  • 材料采购计入资产负债表哪里
  • 集团公司内部结构是什么
  • 无偿赠送是否需要交个人所得税分哪些情况
  • 若依前后端分离做的系统
  • Stable Diffusion 关键词tag语法教程
  • 实名办税人员承担什么责任
  • lvs命令
  • php读取文件内容的方法和函数
  • Google C++ Style中允许使用的Boost库(1) 程序即人生 博客频道 CSDN.NET
  • 房地产预缴增值税计税依据
  • 国家税务总局关于营改增后土地增值税
  • 存货盘盈盘亏处理会计分录
  • 一般户可以付款吗
  • 固定资产清理怎么做账务处理
  • 税控盘抵减增值税
  • 收据所得税前扣除
  • 跨年取得的发票金额大于暂估金额
  • 平销返利是销售折扣吗
  • 企业取得的财政性资金
  • 营利性养老机构有补贴吗
  • 本年利润在明细里怎么填
  • 保安公司购买的保险
  • 商业承兑背书后怎么办
  • 红字发票可以跨月入账吗
  • 什么情况需要预缴
  • 城市生活垃圾处理方式有哪几种
  • 国有资本金是什么意思
  • 企业利润率计算公式是怎样的
  • 银行本票具体操作流程
  • 将备份的mdp文件导入数据库
  • 关闭空闲的ide通知怎么写
  • macbookair无响应
  • centos安装owncloud
  • securecrt输入中文乱码
  • win7怎么查看电脑主板型号
  • cocos2dx官方文档
  • 猫的所有视频
  • JavaScript数组删除元素
  • jquery通过扩展select控件实现支持enter或focus选择的方法
  • set命令应用
  • 批处理命令是什么语言
  • Android getTopActivity的方法
  • javascript教程完整版
  • react jss
  • linux中tar命令
  • nodejs实战
  • shell脚本入门详解
  • asynctask缺点
  • 山东国税网
  • 如何查询车辆购置税完税证明
  • 本期预缴税额怎么填
  • 区地税局会不会分到乡镇
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设