当前位置:   article > 正文

vue-router动态路由_constantroutermap

constantroutermap
  1. 用户不登陆也可以查看的页面
  2. // router index.js
  3. export const constantRouterMap = [
  4. {
  5. path: '/',
  6. component: Layout,
  7. redirect: '/dashboard',
  8. children: [{
  9. path: 'dashboard',
  10. component: () => import('@/views/dashboard/index'),
  11. name: 'Dashboard',
  12. meta: { title: '首页', icon: 'home', noCache: true }
  13. }]
  14. },
  15. {
  16. path: '/404', component: Layout, hidden: true,
  17. children: [{
  18. path: '',
  19. component: () => import('@/views/404')
  20. }]
  21. },
  22. {
  23. path: '/login',
  24. // component: Layout,
  25. hidden: true,
  26. name: 'login',
  27. component: () => import('@/views/login/index')
  28. }
  29. ]
  30. export const createRouter = () => new Router({
  31. // mode: 'history',
  32. routes: constantRouterMap
  33. })
  34. // 重置上一次的matcher,用户退出后不刷新页面,重置router里的routes
  35. const router = createRouter()
  36. export default router
  1. Vuex设置
  2. 由于this.$options.routes非响应式,因此我们需要将所有的路由放到vuex中,动态渲染菜单
  3. 路由放入state中
  4. state: {
  5. routes: constantRouterMap, // 静态路由 router index.js
  6. addRoutes: [] // 动态匹配的路由
  7. }
  1. 在action中过滤路由
  2. // 生成路由
  3. generatorRoutes({ commit }, roles) {
  4. return new Promise((resolve, reject) => {
  5. addRoutes = asyncRoutes.filter(route => roles.find(item => item === route.role))
  6. commit('SET_ROUTES', addRoutes) // 提交处理好的路由放到state中
  7. resolve(addRoutes)
  8. })
  1. 生成动态路由
  2. 当前用户可以查看的页面
  3. router.beforeEach((to, from, next) => {
  4. // 获取cookie中的token
  5. const hasRole = getRole()
  6. if (hasRole && hasRole !== 'undefined') {
  7. // 当vuex中没有路由时,开始生成路由
  8. if (!store.getters.addRoutes.length) {
  9. // 获取当前用户可以查看的页面role
  10. store.dispatch('getUserRole', JSON.parse(hasRole)).then(res => {
  11. if (res.length) {
  12. // generator Routes
  13. store.dispatch('generatorRoutes', res).then(addRoutes => {
  14. // 清除上一次保存的路由
  15. router.matcher = createRouter().matcher
  16. // 通过 addRoutes添加过滤好的路由
  17. router.addRoutes(addRoutes.concat([{ path: '*', redirect: '/404', hidden: true }]))
  18. next({ ...to, replace: true })
  19. })
  20. } else {
  21. // if response is empty jump to login router
  22. removeCookies()
  23. next({ path: '/login' })
  24. }
  25. }).catch(() => {
  26. removeCookies()
  27. next({ path: '/login' })
  28. })
  29. } else {
  30. if (whiteList.indexOf(to.path) > -1) {
  31. next('/dashboard')
  32. } else {
  33. next()
  34. }
  35. }
  36. } else {
  37. removeCookies()
  38. if (whiteList.indexOf(to.path) > -1) {
  39. next()
  40. } else {
  41. next({ path: '/login' })
  42. }
  43. }
  44. })

打工者联盟为了抵抗996、拖欠工资、黑心老板、恶心公司,让我们组成打工者联盟。客观评价自己任职过的公司情况,为其他求职者竖起一座引路的明灯。https://book.employleague.cn/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/254224
推荐阅读
  

闽ICP备14008679号