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

  • mvc框架网页设计如果做一个展示品牌形象的网站,需要在设计上下功夫

    mvc框架网页设计如果做一个展示品牌形象的网站,需要在设计上下功夫

  • 为什么苹果11现在不能激活(为什么苹果11现在还有卖)

    为什么苹果11现在不能激活(为什么苹果11现在还有卖)

  • 苹果6s电池容量(苹果6s电池容量可以加大吗)

    苹果6s电池容量(苹果6s电池容量可以加大吗)

  • 手机QQ浏览器怎么新建文档(手机QQ浏览器怎么压缩视频)

    手机QQ浏览器怎么新建文档(手机QQ浏览器怎么压缩视频)

  • 5Gwifi 用什么加密方式网速快些(无线加5g)

    5Gwifi 用什么加密方式网速快些(无线加5g)

  • 如何评论别人的朋友圈(如何评论别人的风景照)

    如何评论别人的朋友圈(如何评论别人的风景照)

  • 苹果商店无法处理您的购买(苹果商店显示无法购买是为啥)

    苹果商店无法处理您的购买(苹果商店显示无法购买是为啥)

  • 三星手机在安全模式怎么解除(三星手机在安全模式怎么恢复出厂设置)

    三星手机在安全模式怎么解除(三星手机在安全模式怎么恢复出厂设置)

  • 开发者选项长期开启会怎样(开发者选项长期开启有什么危害)

    开发者选项长期开启会怎样(开发者选项长期开启有什么危害)

  • 剪映怎么加中英文字幕(剪映怎么加中英字幕对齐)

    剪映怎么加中英文字幕(剪映怎么加中英字幕对齐)

  • 微信如何把拉黑的人拉回来(微信如何把拉黑的朋友拉回来)

    微信如何把拉黑的人拉回来(微信如何把拉黑的朋友拉回来)

  • 电脑nosignal怎么解决(电脑nosignal怎么办)

    电脑nosignal怎么解决(电脑nosignal怎么办)

  • 微信前面加a什么意思(微信前面加什么英文字母好看)

    微信前面加a什么意思(微信前面加什么英文字母好看)

  • 桌面运维工作内容(桌面运维工作内容分类)

    桌面运维工作内容(桌面运维工作内容分类)

  • 苹果xr怎么提高4g网速(苹果xr怎么提高像素)

    苹果xr怎么提高4g网速(苹果xr怎么提高像素)

  • 华为平板怎么插u盘(华为平板怎么插卡用流量)

    华为平板怎么插u盘(华为平板怎么插卡用流量)

  • ps扫描文件怎么改字(ps扫描文件怎么弄清楚一点的)

    ps扫描文件怎么改字(ps扫描文件怎么弄清楚一点的)

  • 下载管理器在哪里打开(下载中心)

    下载管理器在哪里打开(下载中心)

  • 快手商品上架审核要多久(快手商品上架审核需要多久)

    快手商品上架审核要多久(快手商品上架审核需要多久)

  • 如何下载腾讯视频到手机(如何下载腾讯视频到u盘)

    如何下载腾讯视频到手机(如何下载腾讯视频到u盘)

  • 荣耀20pro怎么关后台(荣耀20pro怎么关闭纯净模式持续保护中)

    荣耀20pro怎么关后台(荣耀20pro怎么关闭纯净模式持续保护中)

  • 华为荣耀9x是什么时候上市的(华为荣耀9x是什么充电器)

    华为荣耀9x是什么时候上市的(华为荣耀9x是什么充电器)

  • 快手日记怎么看(快手如何查看日期)

    快手日记怎么看(快手如何查看日期)

  • 手机版微博id怎么看(手机微博id是登录名吗)

    手机版微博id怎么看(手机微博id是登录名吗)

  • 华为手机中间有个圈圈怎么去掉(华为手机中间有个房子图标是什么意思)

    华为手机中间有个圈圈怎么去掉(华为手机中间有个房子图标是什么意思)

  • 税控盘服务费全额抵扣分录
  • 金融资产交易增值税
  • 固定资产一次性扣除申报表怎么填
  • 收据四联分别叫什么
  • 来料加工生产成本账务处理
  • 财务报表没有申报表
  • 纳税人财务会计报表报送管理办法
  • 应收账款和应付账款对冲会计分录
  • 房地产企业取得净地的税收筹划
  • 退货后发票还能拿去抵税吗
  • 稿酬所得个人所得税计算方法
  • 哪些开普通发票
  • 计提个人负担的社会保险费分录
  • 赎回股份是利好还是利空
  • 制造费用月末怎么结转到生产成本
  • 公司个人股份转让需要缴税吗
  • 开办费计入长期待摊费用汇算清缴时怎么填写
  • 行政事业单位公车使用制度
  • 退税有啥影响
  • 清算期间会计科目
  • 企业购进房产怎么抵扣
  • 股权激励的账务如何处理
  • 工程收到款项会计分录
  • 已失效是什么意思
  • vue如何使用axios
  • 搭建本地http服务器
  • 牛客前端刷题怎么样
  • php url函数
  • 汽车以旧换新怎么操作
  • 工业企业成本核算方法
  • 网上报税优点与缺点
  • 其他收益放在哪里
  • 小规模纳税人利润超过300万
  • 信用减值损失的借贷方向
  • 收到汽车会计分录
  • python第三方库安装教程
  • 利润表中的本期金额和本年累计金额
  • 工资薪金与劳务报酬的区别有哪些
  • 产业增加值是增长量吗
  • 哪个命令可以对mysql数据库做完全备份
  • 或有资产的确认条件基本确定
  • 自助餐怎么核算成本
  • 电子承兑到期怎么收款
  • 生产出口退税企业有哪些
  • 其他应付款的有
  • 出库单与入库单一样吗
  • 在网上如何申领发票
  • 应收账款的审计方式和手段
  • 工业企业中制造费用包括哪些内容
  • sql语句执行顺序怎么写
  • 连接mysql数据的四要素
  • sqlserver 中ntext字段的批量替换(updatetext的用法)
  • ccs 运行
  • windows任务管理
  • win7系统如何彻底删除xp
  • Windows Server 2008使用软件授权管理工具
  • hyper-v怎么样
  • linux的用户
  • 电脑bios怎么设置usb启动
  • GrooveMonitor.exe是什么进程?GrooveMonitor.exe可以禁用卸载吗?
  • wsinspector.exe是什么进程
  • Windows计划任务 不管是否登录 没有窗口
  • w10隐藏功能
  • removed.exe - removed是什么进程 有什么用
  • cocos2dx4.0入门
  • ExtJS4利根据登录后不同的角色分配不同的树形菜单
  • bat基本语法
  • perl keys
  • codeblocks配置文件在哪
  • js 模拟滑动
  • eevee引擎
  • angular 创建项目
  • javascrip语言
  • android 自定义
  • 全面解析朝鲜战争
  • js判断怎么写
  • 学校 税务登记
  • 江苏发票真伪查询系统官网
  • 广东为什么用粤做简称?
  • 企业分立需要开发票吗?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设