美文网首页
vue-element-admin 多级目录(嵌套路由)配置

vue-element-admin 多级目录(嵌套路由)配置

作者: 二仙桥啷个走 | 来源:发表于2019-08-07 11:06 被阅读0次

    项目中基于vue-element-admin的多级路由配置,这里做一下记录

    介绍

    vue-element-admin 是一个后台前端解决方案,它基于 vueelement-ui实现。它使用了最新的前端技术栈,内置了 i18 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。

    链接地址: vue-element-admin

    需求场景

    二级路由无法完整且正确表达项目中所展示的内容信息,需要对信息进行进一步细化,使层次显示的更加清晰明了

    实现效果类似于这样 image.png

    目录结构

    由于项目隐私,路由和组件的代码还是用官方例子作为参考,基本都是大同小异

    • 路由结构
      路由这块可以写一个modules文件夹,用于存放二级及以上的路由模块
      image.png
      三级路由结构 官方例子
      这里写了一个nested 的三级路由结构,基于Layout 布局模块,添加了三个children
    //  nested.js
    
    /** When your routing table is too long, you can split it into small modules **/
    
    import Layout from '@/layout'
    
    const nestedRouter = {
      path: '/nested',
      component: Layout,
      redirect: '/nested/menu1/menu1-1',
      name: 'Nested',
      meta: {
        title: 'Nested Routes',
        icon: 'nested'
      },
      children: [
        {
          path: 'menu1',
          component: () => import('@/views/nested/menu1/index'), // Parent router-view
          name: 'Menu1',
          meta: { title: 'Menu 1' },
          redirect: '/nested/menu1/menu1-1',
          children: [
            {
              path: 'menu1-1',
              component: () => import('@/views/nested/menu1/menu1-1'),
              name: 'Menu1-1',
              meta: { title: 'Menu 1-1' }
            },
            {
              path: 'menu1-2',
              component: () => import('@/views/nested/menu1/menu1-2'),
              name: 'Menu1-2',
              redirect: '/nested/menu1/menu1-2/menu1-2-1',
              meta: { title: 'Menu 1-2' },
              children: [
                {
                  path: 'menu1-2-1',
                  component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
                  name: 'Menu1-2-1',
                  meta: { title: 'Menu 1-2-1' }
                },
                {
                  path: 'menu1-2-2',
                  component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
                  name: 'Menu1-2-2',
                  meta: { title: 'Menu 1-2-2' }
                }
              ]
            },
            {
              path: 'menu1-3',
              component: () => import('@/views/nested/menu1/menu1-3'),
              name: 'Menu1-3',
              meta: { title: 'Menu 1-3' }
            }
          ]
        },
        {
          path: 'menu2',
          name: 'Menu2',
          component: () => import('@/views/nested/menu2/index'),
          meta: { title: 'Menu 2' }
        }
      ]
    }
    
    export default nestedRouter
    

    然后将其导出,在routes.js里面导入,放到想要放的位置(页面的层次结构根据路由的顺序依次渲染)

    // routes.js
    
    import nestedRouter from './modules/nested'
    ...
    /** when your routing map is too long, you can split it into small modules **/
    nestedRouter
    ...
    
    • 组件结构
      组件的存放位置也要按照多级路由的嵌套规则来建文件夹
      这里还是拿官方例子来看, 最外层是nested然后里面放了两个文件夹menu1menu2
      全部展开结果如下图
      image.png
      这里一级菜单menu1下面还有几个二级菜单menu1-1menu1-2menu1-3,所以在menu1下面新建一个index.vue, 在里面加上<router-view>
    image.png
    <template>
      <div style="padding:30px;">
        <el-alert :closable="false" title="menu 1">
          <!-- 原则上有多少级路由嵌套就需要多少个<router-view> -->
          <router-view />
        </el-alert>
      </div>
    </template>
    
    

    按照官方的解释,原则上有多少级路由嵌套就需要多少个<router-view>
    所以当二级菜单menu1-2下面还有几个三级菜单menu1-2-1menu1-2-2时,这时候就需要在menu1-2的index.vue里面再添加<router-view>

    <template>
      <div style="padding:30px;">
        <el-alert :closable="false" title="menu 1-2" type="success">
          <!-- 原则上有多少级路由嵌套就需要多少个<router-view> -->
          <router-view />
        </el-alert>
      </div>
    </template>
    

    然后自己的项目按照这种方式配置,就能实现多级目录(嵌套路由)了。

    jiesen_s.jpg

    相关文章

      网友评论

          本文标题:vue-element-admin 多级目录(嵌套路由)配置

          本文链接:https://www.haomeiwen.com/subject/rioddctx.html