基于el-menu,用递归实现动态n级菜单

简介: element-plus 的 el-menu 菜单组件,功能非常强大,支持n级菜单、图标等等功能。如果菜单是静态的,直接手撸的话,那么按照官网实例即可,但是如果需要基于json动态绑定,而且还是n级菜单,那么要怎么办呢?

element-plus 的 el-menu 菜单组件,功能非常强大,支持n级菜单、图标等等功能。如果菜单是静态的,直接手撸的话,那么按照官网实例即可,但是如果需要基于json动态绑定,而且还是n级菜单,那么要怎么办呢?


分析菜单



el-menu 由 子菜单、菜单项组成(先不考虑分组的问题),子菜单可以看做是树枝,菜单项可以看做是树叶,子菜单可以包含子菜单和菜单项,菜单项不能包含。


定义结构


// 定义菜单
  const myMenu = reactive([
    {
      menuId: '1',
      text: 'vue',
      children: [
        {
          menuId: '11',
          text: '组件1',
          children: [
            {
              menuId: '111',
              text: '组件11'
            }
          ]
        }
      ]
    },
    {
      menuId: '2',
      text: 'reacte'
    }
  ])


一种常见的分组结构,可以加上icon的信息。


写个递归组件



准备工作完成后,我们写一个递归组件即可

<template   v-for="(item, index) in subMenu"  >
    <!--树枝-->
    <template v-if="item.children">
      <el-sub-menu 
        :key="item.menuId + '_' + index"
        :index="item.menuId"
      >
        <template #title>
          <component
            :is=""
            style="width: 1.5em; height: 1.5em; margin-right: 8px;"
          >
          </component>
          <span>{{item.text}}</span>
        </template>
        <!--递归子菜单-->
        <my-sub-menu2 :subMenu="item.children"/>
      </el-sub-menu>
    </template>
    <!--树叶-->
    <el-menu-item v-else
      :index="item.menuId"
    >
      <template #title>
        <component
          :is=""
          style="width: 1.5em; height: 1.5em; margin-right: 8px;"
        >
        </component>
        <span>{{item.text}}</span>
      </template>
    </el-menu-item>
  </template>


父组件

<el-menu
    ref="domMenu"
    class="el-menu-vertical-demo"
    default-active="1"
    @select="select"
    background-color="#6c747c"
    text-color="#fff"
    active-text-color="#ffd04b"
  >
    <!--递归调用,显示菜单-->
    <my-sub-menu :subMenu="myMenu"/>
  </el-menu>


这样就可以实现基于json渲染的n级分组菜单了。


相关文章
|
2月前
|
前端开发
elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件
elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件
87 0
|
7月前
|
数据库
Layui入门&动态树&动态选项卡&用户增加&修改&删除&(一)
Layui入门&动态树&动态选项卡&用户增加&修改&删除&
|
8月前
【el-tree】树形结构拖拽,拖动修改分组
【el-tree】树形结构拖拽,拖动修改分组
274 1
|
4月前
element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解
element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解
144 2
element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解
|
5月前
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
|
7月前
element-ui里的el-table在grid布局下切换数据有滚动条时不断增加?
element-ui里的el-table在grid布局下切换数据有滚动条时不断增加?
28 0
|
7月前
|
前端开发
使用el-menu的时候遇到的bug以及解决方式
使用el-menu的时候遇到的bug以及解决方式
131 0
|
7月前
|
前端开发 JavaScript API
使用.LayUI实现动态选项卡Tab的强大功能
使用.LayUI实现动态选项卡Tab的强大功能
39 0
|
7月前
Layui入门&动态树&动态选项卡&用户增加&修改&删除&(二)
Layui入门&动态树&动态选项卡&用户增加&修改&删除&
|
8月前
|
前端开发
【el-tree】树形组件图标的自定义
【el-tree】树形组件图标的自定义
503 0