zoukankan      html  css  js  c++  java
  • vue 权限路由动态加载

    1.正常的思路前端把常用的路由和需要后端权限的路由分开,然后需要权限的路由又后端直接返回数据,前端处理成路由动态加载的数据。

    后端返回的数据:

    let menuList = [{
        "id": "5fd1d86a8bf1c51a5cc1a76d",
        "path": "/test",
        "component": "Layout",
        "name": "test",
        "redirect": "/test/admin",
        "hidden": false,
        "meta": {
          "title": "合作商管理",
          "roles": ["admin"],
          "icon": "test",
          "noCache": true
        },
        "children": [{
          "id": "5fd1d86a8bf1c51a5cc1a76e",
          "path": "admin",
          "component": "/test/index",
          "name": "test",
          "hidden": false,
          "meta": {
            "title": "合作商列表",
            "roles": ["admin"],
            "icon": "partner",
            "noCache": true
          }
        }]
      }]
    

      2.前端需要把这个数据变成路由动态加载

    let filterRouters = filterAsyncRouter(menuList)
    //遍历后台传来的路由字符串,转换为组件对象
    function filterAsyncRouter (routes) {
      const accessedRouters = routes.filter(route => {
        if (route.component === 'Layout') {
          route.component = Layout
        } else {
          if (route.path.indexOf(':') > -1) {
            const component = route.component
            route.component = resolve => require([`@/views${component}`], resolve)
            //  route.component = () => import(`@/views${route.component.substr(0, route.component.indexOf(':') - 1)}`)
          }
          else {
            const component = route.component
            route.component = resolve => require([`@/views${component}`], resolve) 
            //  route.component = () => import(`@/views${component}`)
          }
        }
        if (route.children && route.children.length) {
          route.children = filterAsyncRouter(route.children)
        }
        return true
      })
      return accessedRouters
    }
    

      3.添加路由

    router.options.routes = store.getters.routes
    router.addRoutes(store.getters.routes)
    next({ ...to, replace: true }  

    说明:
    1.在2中标红的地方是因为webpack 版本不一样,导致用import 加载不了,这块研究了半天。

    参考文案:https://www.cnblogs.com/mark5/p/12101906.html

     

  • 相关阅读:
    webservice的cxf的客户端
    webservice用cxf发布SOAP
    webservice声明发布SOAP1.2
    webservice使用注解修改WSDL内容
    webservice获取天气信息
    结巴分词原理介绍
    Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
    【Pandas】Pandas求某列字符串的长度,总结经验教训
    UTF-8与UTF-8 BOM
    logging.basicConfig函数
  • 原文地址:https://www.cnblogs.com/moon-yyl/p/14140372.html
Copyright © 2011-2022 走看看