基于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级分组菜单了。


相关文章
【el-tree】树形结构拖拽,拖动修改分组
【el-tree】树形结构拖拽,拖动修改分组
547 1
|
数据库
Layui入门&动态树&动态选项卡&用户增加&修改&删除&(一)
Layui入门&动态树&动态选项卡&用户增加&修改&删除&
|
22天前
|
前端开发 JavaScript 开发者
利用 el-select 和 el-tree 实现树形结构多选框联动功能
本文详细介绍了如何使用ElementUI中的el-select下拉选择器和el-tree树形控件来实现多功能联动选择器,包括多选、删除、搜索、清空选项等功能。通过树形控件展示复杂的层级结构,用户可以通过下拉选择树形节点,实时搜索节点,且支持批量选择和删除功能。文中提供了完整的HTML、JavaScript和CSS代码实现,帮助开发者快速集成此功能。
270 0
利用 el-select 和 el-tree 实现树形结构多选框联动功能
|
4月前
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
181 1
|
6月前
uniapp uni-combox 下拉提示无匹配项(完美解决--附加源码解决方案及思路)
uniapp uni-combox 下拉提示无匹配项(完美解决--附加源码解决方案及思路)
348 0
|
6月前
element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解
element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解
708 2
element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解
|
6月前
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
Layui入门&动态树&动态选项卡&用户增加&修改&删除&(二)
Layui入门&动态树&动态选项卡&用户增加&修改&删除&
|
前端开发
el-tree菜单权限配置--是否要联动的问题
el-tree菜单权限配置--是否要联动的问题
153 1
|
前端开发
【el-tree】树形组件图标的自定义
【el-tree】树形组件图标的自定义
1511 0