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

  • switch有底座怎么投屏(switch底座怎么连接笔记本)

    switch有底座怎么投屏(switch底座怎么连接笔记本)

  • 手机支付宝免冠照片怎么拍(手机支付宝免冠照怎么拍)

    手机支付宝免冠照片怎么拍(手机支付宝免冠照怎么拍)

  • 抖音私信图片保存不了(抖音私信图片保存看不到)

    抖音私信图片保存不了(抖音私信图片保存看不到)

  • 微信群的视频无法播放过期(微信群视频无法加入)

    微信群的视频无法播放过期(微信群视频无法加入)

  • 苹果11promax电池能用多久(苹果11promax电池76能多久)

    苹果11promax电池能用多久(苹果11promax电池76能多久)

  • 华为可以插内存卡吗(华为可以插内存卡的平板)

    华为可以插内存卡吗(华为可以插内存卡的平板)

  • lp67防水什么意思(防水是什么意思)

    lp67防水什么意思(防水是什么意思)

  • tf电脑什么牌子(tf属于什么档次的品牌)

    tf电脑什么牌子(tf属于什么档次的品牌)

  • 为什么迅雷用wifi下载不了,用流量就可以(为什么迅雷用wifi下载没速度)

    为什么迅雷用wifi下载不了,用流量就可以(为什么迅雷用wifi下载没速度)

  • tcpip协议一共有几层(tcpip主要包括哪些协议)

    tcpip协议一共有几层(tcpip主要包括哪些协议)

  • airpodspro为什么没有弹窗(airpodspro为什么显示的是airpods的图标)

    airpodspro为什么没有弹窗(airpodspro为什么显示的是airpods的图标)

  • 小米9支持什么快充协议(小米9支持什么指纹解锁)

    小米9支持什么快充协议(小米9支持什么指纹解锁)

  • 苹果密码错误锁机多久(苹果密码错误锁屏了怎么办)

    苹果密码错误锁机多久(苹果密码错误锁屏了怎么办)

  • 淘宝网官方网址是多少(淘宝官方网址www)

    淘宝网官方网址是多少(淘宝官方网址www)

  • 手机的下载管理在哪(手机变成电脑下载)

    手机的下载管理在哪(手机变成电脑下载)

  • 抖音怎么合拍视频(抖音怎么合拍视频教程唱歌)

    抖音怎么合拍视频(抖音怎么合拍视频教程唱歌)

  • 微信语音静音会显示吗(微信语音静音会有声音吗)

    微信语音静音会显示吗(微信语音静音会有声音吗)

  • 淘宝电子凭证开通原因(淘宝电子凭证是干嘛的)

    淘宝电子凭证开通原因(淘宝电子凭证是干嘛的)

  • 小米手机设置APN快速4G上网方法(苹果手机apn设置在哪里)

    小米手机设置APN快速4G上网方法(苹果手机apn设置在哪里)

  • 亲属卡月末清零吗(亲属卡清零的钱去了哪里)

    亲属卡月末清零吗(亲属卡清零的钱去了哪里)

  • 安卓手机如何打开.xp3文件(安卓手机如何打开.xy文件)

    安卓手机如何打开.xp3文件(安卓手机如何打开.xy文件)

  • 微信聊天记录换手机可以转移吗(微信聊天记录换个手机怎么恢复)

    微信聊天记录换手机可以转移吗(微信聊天记录换个手机怎么恢复)

  • 小红书订单去哪看啊(小红书商城的订单在哪看)

    小红书订单去哪看啊(小红书商城的订单在哪看)

  • 高德地图导航信号弱怎么回事(高德地图导航信号弱怎么解决?)

    高德地图导航信号弱怎么回事(高德地图导航信号弱怎么解决?)

  • u启动u盘怎么安装win10 u启动u盘安装win10视频教程(u启动u盘怎么装系统)

    u启动u盘怎么安装win10 u启动u盘安装win10视频教程(u启动u盘怎么装系统)

  • msgen命令  创建英文邮件目录(msg文件怎么创建)

    msgen命令 创建英文邮件目录(msg文件怎么创建)

  • 留存收益资本成本率计算公式
  • 营业执照经营范围劳务怎么写
  • 建筑公司收到材料发票
  • 研发费用可以结转以后年度抵扣吗对吗
  • 外商投资企业啥意思
  • 电梯合同属于什么合同
  • 个人以房产进行交易
  • 投标人认证证书
  • 4s店试驾车转卖怎么开票
  • 事业单位收到增资款
  • 工程项目产生的沙石怎么处理
  • 普通发票每个月有限制吗
  • 开票系统问题
  • 最新土地增值税实施细则
  • 税务局收到企业发票
  • 企业电子印章申请流程海口
  • 公司充加油卡发票税额为0 怎么入账
  • 个人所得税哪些可以专项扣除
  • 任务栏图标重叠一起
  • 发票已抵扣未入账
  • 不能升级win11的二手电脑值得购买吗
  • 会计分录错误用什么方法更正
  • php安装教程详解
  • 上月开的发票会计漏做帐本月应如何补做账?
  • 工资申报怎么写
  • wedp是什么文件
  • laravel with查询指定字段
  • php1 zybdjx
  • PHP:mcrypt_enc_get_algorithms_name()的用法_Mcrypt函数
  • 结算应付职工薪酬怎么算
  • 长期借款的主要原因
  • 铁路运输企业受托代征的印花税款信息
  • php sql 教程
  • 增值税发票半年能开吗
  • php分段
  • 暂估增值税可以抵扣吗
  • php正则替换函数怎么写
  • 通过云服务器租号安全吗
  • 固定资产提前报废当月计提折旧吗
  • php 进程间通信
  • python pyecharts
  • 加计减免的分录怎么做
  • 增值税附加税减免政策2022年
  • 缴纳城镇土地税
  • 小规模纳税人当月应交增值税怎么算
  • 免税增值税纳税申报表怎么填
  • phpcms模板制作教程
  • 一般纳税人差额纳税
  • 减免税款属于政府补助利得吗
  • 跨年租金如何处理
  • 库存冲红是什么意思
  • 公司对公账户没钱了辞退员工
  • 股东借款转为实收资本的说明
  • 低值易耗品摊销借贷方向
  • 内部使用的收据可以做原始凭证吗
  • 补缴以前年度养老保险分录
  • 建账初期账务处理程序
  • 私人企业会计工作内容
  • 按不同要求分类
  • linux所谓的free
  • 如何查看电脑型号及配置
  • ubuntu服务器命令
  • Mac如何设置自动锁屏
  • Linux服务器端口状态
  • win8怎么清空电脑只剩系统
  • jquery 图片左右滚动
  • 批处理文件.bat
  • 淘宝国际平台叫什么
  • easyui combotree加载静态数据问题(选不上)解决方法
  • bat读取文件内所有内容
  • python输出代码怎么写
  • 利用的英文
  • python生成docx
  • python写出来的程序怎么用
  • unity ugui教程
  • javascript default
  • python mor
  • 国家税务总局全国增值税查询
  • 工会活动经费的请示
  • 纳税人就是负税人对还是错
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设