目前是判断权限生成可访问的路由后addRoutes进去。但是退出登录后换一个账号登录,然后又重新生成一次,之后addRoutes。
问题1:控制台会警告提示[vue-router] Duplicate named routes,就是有重复的路由add进去了。
问题2:可能存在,直接输入地址栏跳转到前一账号可访问的路由(目前是在输地址栏后跳转,整个单页应用会重新init一次,根据当前缓存的账号权限重新生成routes,此问题暂时好像不需要解决)
会不会有方法去删除已经添加的routes?我看过vue-router的文档没有写这个方法。
暂时没有remove routes的方法。所以现在的做法是退出登录之后刷新一下页面。
https://github.com/PanJiaChen/vue-element-admin/blob/700e08b7951e9b6947ec0521af93354280776b2e/src/views/layout/components/Navbar.vue#L74-L77
同样,当session丢失之后,切换不同权限当账号登陆,那么新的权限菜单不会被立即重新生成,需要刷新页面。
官方相关 issue
我的做法是直接location.reload() 跟 @PanJiaChen 一样.... 😂
难道就没有办法解决,切换用户登录,动态路由重复的问题么?或者说清除路由,退出刷新页面到登录这种体验方式个人觉得有点不好吧,应该不会无解吧
router.matcher,了解一下~
@zhangxlgj reload算最快捷、方便的方法了,之前有篇拙作可以参考下?[快速重置vuex数据](https://lonhon.top/2018/05/27/Vuex-reset-data-by-location-reload/
const createRouter = () => new VueRouter({
linkActiveClass: 'active',
mode: 'hash',
base: './',
routes: constantRouterMap
});
const router = createRouter();
在addRoutes之前重置matcher 即可解决
```
router.matcher = createRouter().matcher;
router.addRoutes(store.getters.addRouters);
@TY-LIU 这个方法可行,4.0版本已经基于这个实现了路由的重置。
之后会写一份文档来说明。
@TY-LIU 这个方法可行,4.0版本已经基于这个实现了路由的重置。
之后会写一份文档来说明。
请问你在哪里得知4.0版本已经基于这个实现了路由的重置?我也想看看相关资料,谢谢
Most helpful comment
在addRoutes之前重置matcher 即可解决
```
router.matcher = createRouter().matcher;
router.addRoutes(store.getters.addRouters);