vue3 关于动态路由刷新出现空白页最优解
admin 阅读: 2024-03-29
后台-插件-广告管理-内容页头部广告(手机) |
动态路由刷新出现空白页:
原因:刷新页面的时候动态路由会刷新掉,然后动态路由会重新加载,而匹配路由会在加载路由之前,所以会导致空白页
router.beforeEach(async (to, from, next) => { const whiteList = ['/login'] let token = store.getters.GET_TOKEN;//token let hasRoutes=store.state.hasRoutes; //默认是false,刷新页面这个也是false let menuList=store.getters.GET_MENULIST; //后端返回的菜单列表 if (token) { if(!hasRoutes){ bindRoute(menuList);//添加动态路由 store.commit("SET_ROUTES_STATE",true); } next(); } else { if (whiteList.includes(to.path)) { next(); } else { next('/login'); } } }) //添加动态路由 const bindRoute = (menuList) => { let newRoutes = router.options.routes; menuList.forEach(menu => { if (menu.children) { menu.children.forEach(m => { // 菜单转成路由 let route = menuToRoute(m, menu.name); if (route) { newRoutes[0].children.push(route); // 添加到路由管理 } }) } }) // 重新添加到路由 newRoutes.forEach(route => { router.addRoute(route) }) } // 菜单转成路由 const menuToRoute = (menu, parentName) => { let route = { name: menu.name, path: menu.path, meta: { parentName: parentName }, children:[], } if (!menu.component) { route.component = '' } else { route.component = () => import('@/views/' + menu.component + '.vue') } return route }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
解决办法:递归再调用beforEach,或者直接跳回首页
在你加载路由的地方
递归调用:next({ …to, replace: true });(慎用,如果你的后台管理table是带标签会有问题,没有放对位置会死循环)
跳回首页:next({path:‘/index’})
附上解决的代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |