$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方法获取
方法二,使用状态管理工具,自行保存一份路由数据
云在青天水在瓶。