vue-router动态路由 - 角色切换或退出登录时重置路由表
vue-router@4以上可以使用removeRoute()
方法来移除.
router.getRoutes().forEach(route => {
// 这里还需要条件判断哪些是静态路由不需要移除
router.removeRoute(route.name);
});
但是vue-router@3的话,只能使用location.reload()
的方式去属性页面.
但是刷新的时机也要选对,我本来试了一下在重新获取到权限的时候进行刷新,但是会导致跳转到目标页后多一次刷新的动作,然后就会导致闪一下.
后来想了一下,发现在路由钩子,进去的时候,也就是例如过期或者手动退出之后,要进去到login页的时候,判断当前路由表是否初始路由表长度,以及是否携带重定向参数来决定是否需要reload.
例如:
// ...
// 路由守卫
router.beforeEach((to, from, next) => {
// !!!注意: 如果静态路由有变改,记得同步修改判断!!!
if (to.path === '/user/login' && to.query.redirect && router.getRoutes().length !== 9) {
location.reload()
}
// ...
}
个人经验,如果有更好的方法欢迎留言补充更正:)