文章目录
路由
最近写了一次动态路由,由于路径原因导致了开发时的一些问题,在这里记录一下。
1 | 一、require.ensure() 方法来实现代码打包分离 |
动态路由的组件加载写法
() => import(‘@/views/index’) 只能写字符串,不能写变量,因为这种写法是在打包时进行的
(resolve) => require([‘@/views/index’], resolve) ,可以写成变量形式,但是必须有头尾,如 (resolve) => require([‘@/‘ + path + ‘.vue’], resolve) ,webpack 通过 @/ 路径来确定要打包的目录, 通过 .vue 确定要打包的内容,缺一不可,不能写成 (resolve) => require([path], resolve),因为 webpack 也会同样不知道需要打包什么,打包的时候不知道要打包什么,就不会打包,编译时就会报错
据说以后都用 () => import(@/views/${path}
),已经支持了,但潘家成这里不能用。
例子
动态路由流程
后台返回这样的数据时,前端需要做的事情有三步。
1 | [ |
- 在路由前置守卫 router.beforeEach 中,判断是否有 userInfo,没有的话就获取一下 userInfo,在这时候顺便把获取到的路由存放到 store(vuex) 里去,一般放到 user.state.routes,此时的路由由于 component 的原因,不能直接使用。
- 获取到 user 中的路由后,把 user 路由中的 component 转为真正的 vue 组件后保存在 permission 的 store 中,之后返回真正的 vue 路由,调用 router.addRoutes(newRoutes) 来新增路由
- 把 @/layout/components/Sidebar 里 的 v-for 遍历的 routes 改成 permission 里的 routes(全部路由,包含新增的)
部分代码如下,会写一些工具方法,getView 就是本文上面讨论的内容,也是写这篇记录的原因。
1 | /* |