vue 动态加载路由

思路:后台传入路由json字符串,在前端组路由

根据后端返回的json字符串。组路由的方法

var refRouter = []
 // jsonstr 传入的路由字符串
export function loadRouter (jsonstr) {
  let jsonRouter = JSON.parse(jsonstr)
  let itemrouter = {
    path: jsonRouter[0].path,
    name: jsonRouter[0].name,
    component: (resolve) => { require([`@/${jsonRouter[0].component}`], resolve) },
    meta: jsonRouter[0].meta,
    children: []
  }
  let childrenItem = []
  jsonRouter[0].children.forEach(item => {
    let itemsC = {
      path: item.path,
      name: item.name,
      component: (resolve) => { require([`@/${item.component}`], resolve) },
      meta: item.meta
    }
    childrenItem.push(itemsC)
  })
  // 拼接路由
  itemrouter.children = childrenItem
  refRouter.push(itemrouter)
  // 清除之前加载的路由
  resetRouter()
  router.options.routes = refRouter
  router.addRoutes(refRouter)
}

遇到的问题

原来在后台将路由的 component字段 填入@/xx/xx.vue,后发现报错。于是更改未·@/·,
@ 是在src文件下。
需要在webpack.base.conf.js文件下添加’@’: resolve(‘src’),

 resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
    }
  }

路由json字符串

在这里插入图片描述

这里只是实现乐路由动态加载。还是有点小问题。后续实际需要更改

// 判断是否需要登录权限 以及是否登录(前置路由守卫)
router.beforeEach((to, from, next) => {
  console.log('判断')
  console.log(to)
  if (VueCookies.get('Islogin')) { // 判断是否登录
    // 可以跳转后台
    let routes = sessionStorage.getItem('curPath')
    if (routes !== null) {
      console.log(to.matched.length)
      if (to.matched.length === 0) {
        // 加载路由
        loadRouter(routes)
      }
    }
    next()
  } else { // 没登录则跳转到登录界面
    // 不可以跳转
    next()
  }
})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值