其他分享
首页 > 其他分享> > $router.options.routes取不到全部路由

$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方法获取

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

 

标签:vue,matcher,addRoutes,routes,router,options,路由
来源: https://www.cnblogs.com/mjwblog/p/16458187.html