自己掉坑里面去了, 出来就做个好人, 把坑填了, 至少后面的人, 再掉进去, 容易出来一些
在路由的前置守卫里面, 使用 addRoutes 钩子后, 直接调用 next() , 如果当前页面的 路由 是通过 addRoutes 添加进去的
刷新页面就会出现 对应的路由组件不会渲染的 情况, 也不会报错
详细原因未知: 大致理解为, 当进入 路由的 前置钩子 (router.beforEach) 的时候, 路由的结构是不会发生变化的, 至少本次跳转, 路由的结构是不会变化的
好比说一张空门禁卡, 你 去注册小区的门禁, 然后物业跟你说, 明天才能用, 你今天刷一万次也打不开
addRoutes 添加的 路由, 当前访问是没法 跳转进去的, 正确的做法是, 调用next, 重定向当前的路由
let isAddRouter = false; router.beforeEach(to, from, next) { if (!isAddRouter) { isAddRouter = true router.addRoutes([路由]) // 这一行就是解决问题的最终办法, 重新进当前路由 next({...to, replace: true}) } else { next() } }
所以我们会觉得 router.addRoutes( [路由] ) 是不生效的, 因为打印 router 里面options上的确没有新增的 路由
其实就算生效了, options 上也是没有 动态新增的路由的