前言
最近设计动态路由时,刷新页面空白。突然想起以前笔记里面记录过,翻看了下,今天得空儿分享出来。
问题描述
在全局前置守卫router.beforeEach里面加入动态路由设计时,刷新动态页面,明明router已经生成了,结果还是空白,打印后发现to对象里面除了path其余属性皆为空值(如下图)。
原因
在刷新后动态路由需要重新获取,而to对象是在动态路由生成之前产生,所以获取不到真正路由信息。
解决方案
方案一
正常的next()加个matched长度判断,matched是当前路由的所有嵌套路径片段的路由记录。
...省略正常判断路由是否存在...if (to.matched.length ===0) next({path: to.path})else next()
方案二
if(!token){...省略生成动态路由...router.addRoutes(menuRouters);if (to.path) {next({path: to.path });} else {next();}} else {console.log("动态菜单和路由已存在");next();}
方法很多,注意不要陷入死循环即可,以上提供两种供大家参考!