vue 重置路由不生效
vue使用动态添加路由,重置路由没有生效
使用的以下方法重置的路由
export function resetRouter () { router.matcher = new Router({
mode: 'hash',
base: process.env.VUE_APP_PUBLICPATH,
scrollBehavior: () => ({
y: 0
}),
routes: [...constantRoutes]
}).matcher // reset router
}
而且用这个方法,固定的路由是可以重置。但是使用router.addRoutes()这个方法动态添加的路由就不行了。
我需要做的功能是,不同的权限显示不同的路由。就是退出登录就需要重置路由。不然显示的还是之前的路由。
目前除了上面这个重置路由的方法,我能想到的就只有刷新页面去重置路由了
有没有,还有其他方法的?望各位大神指教一下,谢谢!
回答:
可以参考我的解决方案:
https://gitee.com/ericfang/ea...
addRoutes
之后在重置 matcher
即可;
clearRoute(state) { state.menuTree = [];
state.routeAuthList = [];
router.options.routes[0].children = [];
router.addRoutes(router.options.routes);
router.matcher = new Router({
routes: router.options.routes,
});
},
回答:
可以先看看 vue-router@4 文档,vue-router@4 不存在 matcher 属性,通过新增的 removeRoute
api来移除路由。
只需要在 addRoute
前删除原路由就可以了。如果 addRoute
添加的是一个嵌套路由(带 children
),需要递归删除。
/*** 删除嵌套路由
* @param route
*/
const deepDelete = (route: RouteRecordRaw) => {
router.removeRoute(route.name);
route.children?.forEach((item) => deepDelete(item));
};
/**
* 添加嵌套路由
* @param routes
*/
const addRoutes = (routes: RouteRecordRaw[]) => {
routes.forEach((item) => {
deepDelete(item); // 避免重复添加路由
router.addRoute(item);
});
};
以上是 vue 重置路由不生效 的全部内容, 来源链接: utcz.com/p/936907.html