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


相关文章
|
7月前
有关element UI el-table 跟el-dialog搭配使用出现的问题,背景问题,穿透问题
有关element UI el-table 跟el-dialog搭配使用出现的问题,背景问题,穿透问题
328 0
element中el-cascader级联 下拉选择-可单独多选(整理)
element中el-cascader级联 下拉选择-可单独多选(整理)
|
2月前
|
前端开发 JavaScript 开发者
利用 el-select 和 el-tree 实现树形结构多选框联动功能
本文详细介绍了如何使用ElementUI中的el-select下拉选择器和el-tree树形控件来实现多功能联动选择器,包括多选、删除、搜索、清空选项等功能。通过树形控件展示复杂的层级结构,用户可以通过下拉选择树形节点,实时搜索节点,且支持批量选择和删除功能。文中提供了完整的HTML、JavaScript和CSS代码实现,帮助开发者快速集成此功能。
838 0
利用 el-select 和 el-tree 实现树形结构多选框联动功能
|
3月前
|
JavaScript
ElementUI的el-dialog弹窗修改设置可拖拽可最大化
该方案通过自定义Vue指令实现ElementUI的`el-dialog`弹窗的拖拽和最大化功能。只需在`main.js`中引入并注册指令,然后在Vue组件中绑定指令即可。支持自定义参数控制是否允许最大化和拖拽,并提供最大化后的回调函数。具体使用方法详见示例代码。
454 0
ElementUI的el-dialog弹窗修改设置可拖拽可最大化
|
5月前
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
252 0
|
7月前
基于sortablejs实现拖拽element-ui el-table表格行进行排序
基于sortablejs实现拖拽element-ui el-table表格行进行排序
|
前端开发 JavaScript
饿了么UI中el-tree中的树节点选中高亮的两种常用方式(highlight-current属性)
饿了么UI中el-tree中的树节点选中高亮的两种常用方式(highlight-current属性)
497 0
|
7月前
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
element-ui可编辑行增加行或删除行
element-ui可编辑行增加行或删除行
element-ui里的el-table在grid布局下切换数据有滚动条时不断增加?
element-ui里的el-table在grid布局下切换数据有滚动条时不断增加?
116 0