场景:
【vue-router 动态路由刷新页面空白或者404】登录系统后需调取接口,从后端动态拿到菜单动态设置路由,这样直接登录并跳转没有问题,但是直接访问动态添加的路由,就会出现空白页或者404页面
产生404原因:
404路由是在设置动态路由之前加入的,当访问一个动态路由时,访问的路由还不存在,当通过addRoute加入路由,并不会触发新的导航。也就是说,除非触发新的导航,否则不会显示所添加的路由。所以重定向到了404
解决:
404路由在设置动态路由时添加,当addRoute加入路由也会出现空白,这时需要在路由守卫里重新触发路由加载
if (token) {
// 没有菜单
if (!userStore.menus.length) {
// 这里设置动态路由
await userStore.afterLogin()
// 动态理由设置好之后,重新触发导航
router.replace(to)
}
} else {
// 非白名单,跳转到登录页
if (!WHITE_NAME_LIST.includes((to as any).name)) {
router.replace(LOGON_NAME)
}
}