$router.options.routes取不到全部路由

最近在看老项目的路由逻辑

项目使用constantRoutes和asyncRoutes分别代表基本路由和动态路由。createRouter时,传入的routes参数只有基本路由

在路由导航守卫中,判断用户权限生成动态路由,通过router.addRoutes方法将动态路由添加到路由中

 

但是我发现router.addRoutes之后,打印$router.options.routes,打印出来的并不是全量的路由,仍然只有基本路由(虽然打印不出来,但是不影响使用,页面跳转没有任何问题)

查了下项目里的路由逻辑没有问题,那原因可能就在vue-router上了

查看node_modules中vue-router源码,发现router.addRoutes方法中,只给matcher对象增加了新路由,并没有更新router.option

matcher对象是给vue-router内部使用的,所以项目里页面跳转没有出问题,但router.option打印不出来

 

我本地项目中vue-router是3.0.6版本

查看vue-router当前最新版本,3.5.4版本的源码,发现vue官方新增了getRoutes方法,用于获取matcher对象上的全量路由

 

$router.options.routes取不到全部路由的解决方法

方法一,vue-router更新到3.5.0版本以上,使用getRoutes方法获取

方法二,使用状态管理工具,自行保存一份路由数据

 

posted @   不系舟178  阅读(2209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示