路由跳转不过去——TypeError: Cannot read property ‘components‘ of undefined

2,543 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第一天,点击查看活动详情1.jpg

记录一次bug排查

背景:

bug出现的环境:vue单页应用;vue版本2.6.x;vue-router版本3.0.x;任何浏览器都能复现

具体报错信息:

image.png

解决过程:

一、百度看了看说是有两个组件都引用了mixins的原因,然后我就注释了子页面的mixins,问题就解决了,所以我就复制了一个js引入,开心的提交代码了,结果测试又复现了,我本地看了看也复现了

image.png

二、又找了找其他网友,有的说可能是vue版本和vue-router版本不匹配导致,于是我将vue-router版本升级到了3.3.x,结果还是不行

三、仔细想了想,注释掉mixin文件确实是可以的呀,所以就安心排查mixin文件;里面的js非常简单就几个请求,所以代码应该不会有问题

四、又看了看第一个解决方法和报错信息,components报错,可能是组件引入的原因,又看了看页面流程;终于发现mixin文件里面引入了一个组件,刚好这个组件是下次跳转要进入的组件,这不打架了吗,把mixin文件里面的组件引入去掉果然好了

image.png

描述页面流程:

在jgbl下面的index.vue进行办理流程;第一个流程需要跳转tqyy下面的index.vue,在这个js中混入了mixin-jgbl,这一步没有问题;下一个流程是需要跳转到ajpx下面的index.vue;这就跳转不过去了,因为在上一次跳转的时候mixin文件中已经引入了ajpx下面的index.vue文件

总结:

在引入组件的时候要特别注意,即将跳转的页面不能是之前js引入过的组件

在这个项目中出现一个很严重的问题,没有把pages组件和components组件分开,按理说需要路由跳转的组件才放到pages文件夹下面;js里面引入的组件都应该放到components文件夹下面

项目不是自己写的排查难度会加大,所以我们在写项目的时候目录结构一定要简洁清晰明了

再次谢谢提供思路的网友