1、对于vue-router3 (vue2) 官方没有提供删除方法
策略:创建新的router对象,将matcher 赋值给旧的
const router1=new Vue ({...})
const router2=new Vue ({...})
router1.matcher = router2.matcher
const createRouter = () => new Router({ // mode: 'history', // require service support scrollBehavior: () => ({ y: 0 }), routes: constantRoutes }) const router = createRouter() // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465 export function resetRouter() { const newRouter = createRouter() router.matcher = newRouter.matcher // reset router }
2、vuew-router4 (vue3) 提供了
removeRoute 方法删除注册路由,
export function resetRouter(){ let routers = router.getRoutes() routers.map(it=>{ if(!['login','404','notFind'].includes(it.name)){ router.removeRoute(it.name) } }) }
3、整体方案:
删除token,跳转到登录页,同时清除已注册路由(防止切换角色后还能访问另一个角色的权限),beforeEach中加有无token检测