vue3、element-plus递归实现动态菜单

vue3、element-plus递归实现动态菜单

  • 使用场景:动态菜单
  • 为什么使用递归
  • 递归在动态菜单中的实现

使用场景:动态菜单

动态菜单是指菜单项的数量和层次结构可能是动态的,通常来自后端或用户输入。这些菜单的特征包括:

多层嵌套:菜单可以包含子菜单,甚至更多层的嵌套,形成树状结构。🌳
动态数据源:菜单的数据可能来自API、数据库或用户输入,导致菜单项的数量和结构可能随时变化。📊
灵活性:递归可以使代码更灵活,可以适应菜单结构的变化而不需要大量代码改动。🔄

为什么使用递归

递归实现动态菜单的原因和优点包括:

简化代码逻辑:当菜单结构多层嵌套时,递归可以大幅简化代码逻辑,使其更易于维护。🧩
可扩展性:递归实现的菜单可以适应不同嵌套深度,不需要特定的代码处理。⚡️
与树状数据匹配:递归在处理树状数据时特别有效,因为它可以逐层遍历。🌲
代码可读性:递归代码通常更简洁,遵循一致的逻辑结构。📖

递归在动态菜单中的实现

为了使用递归实现动态菜单,你需要定义一个递归组件,然后递归处理菜单数据的每一层。下面是递归实现动态菜单的基本步骤:

定义递归组件:创建一个组件,用于处理菜单项。如果菜单项有子项,则递归调用自己。🔄
检测终止条件:确保组件在没有子菜单时停止递归,以避免无限递归。🚫
迭代菜单数据:在顶层组件中,使用循环或v-for遍历菜单数据,并递归生成子菜单。🔁

DynamicMenu.vue

<template>
  <el-menu class="el-menu-vertical-demo">
    <!-- 递归生成菜单 -->
    <menu-item
      v-for="(item, index) in menuData"
      :key="index"
      :item="item"
      :index="index.toString()"
    />
  </el-menu>
</template>

<script lang="ts" setup>
import { ref } from "vue";
import MenuItem from "./components/MenuItem.vue";
const menuData = ref([
  {
    label: "Main Menu 1",
    children: [
      {
        label: "Sub Menu 1-1",
        children: [
          { label: "Sub Menu 1-1-1", children: [] },
          { label: "Sub Menu 1-1-2", children: [] },
        ],
      },
      {
        label: "Sub Menu 1-2",
        children: [{ label: "Sub Menu 1-2-1", children: [] }],
      },
    ],
  },
  {
    label: "Main Menu 2",
    children: [],
  },
]);
</script>

<style lang="scss" scoped></style>

./components/MenuItem.vue

<template>
  <el-sub-menu v-if="hasChildren" :index="props.index">
    <template #title>
      {{ props.item.label }}
    </template>

    <menu-item
      v-for="(child, childIndex) in props.item.children"
      :key="childIndex"
      :item="child"
      :index="`${props.index}-${childIndex}`"
    />
  </el-sub-menu>

  <el-menu-item v-else :index="props.index">
    {{ props.item.label }}
  </el-menu-item>
</template>

<script lang="ts" setup>
const props = defineProps({
  item: {
    type: Object,
    default: {},
  },
  index: {
    type: String,
    required: true,
  },
});

const hasChildren = props.item.children && props.item.children.length > 0;
</script>

<style lang="scss" scoped></style>

在这里插入图片描述
这个示例展示了递归组件如何递归处理菜单的嵌套结构。如果有子菜单,继续递归;没有子菜单则显示菜单项。这样,你可以灵活地构建动态菜单,并支持多层嵌套。🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/586512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql从入门到精通——Mysql知识点总结(基础篇)

参考视频 黑马程序员 MySQL数据库入门到精通i 题单推荐 入门 进阶 SQL语句类型 DDL:数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段)DML:数据操作语言&#xff0c;对数据库表中的数据进行增删改DQL:数据查询语言,用来查询数据库中表的…

Linux第二节--常见的指令介绍集合(持续更新中)

点赞关注不迷路&#xff01;&#xff0c;本节涉及初识Linux第二节&#xff0c;主要为常见的几条指令介绍。 Linux下基本指令 1. ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#…

VPot-Free一款功能强大的文字转语音工具 v2306

01 软件介绍 VPot-FREE是一款功能强大的免费文字转语音工具&#xff0c;为用户提供了便捷的语音合成功能。无论是想将文字转化为语音进行朗读&#xff0c;还是将文章转为语音保存&#xff0c;VPot-FREE都能满足你的需求。 多种语音风格可供选择&#xff0c;包括男声、女声以及…

笔记-用Python脚本启停JAR程序

用Python脚本启停JAR程序&#xff0c;需要用到python中的以下内置模块 subprocess 是 Python 的一个标准库模块&#xff0c;用于在新进程中执行子命令&#xff0c;获取子进程的输入/输出/错误以及返回码等os 是 Python 的一个标准库模块&#xff0c;它提供了与操作系统交互的功…

Vue---混入

Vue—混入 目录 Vue---混入声明mixin**局部使用**全局使用 mixin&#xff08;混入&#xff09;&#xff1a;可以将组件中共用的配置提取到一个对象内&#xff0c;以此便不用再每个组件中都写一遍了 声明mixin 定义mixin/index.js文件 const mixinData {data(){return {name…

Linux内核深入学习 - 中断与异常(上)

中断与异常 中断通常被定义为一个事件&#xff1a;让事件改变处理器执行的指令顺序这样的事件&#xff0c;与CPU芯片内外部硬件电路产生的电信号相对应&#xff01; 中断通常分为同步中断与异步中断&#xff1a; 同步中断指的是当指令执行时&#xff0c;由CPU控制单元产生的…

基于Java-jsp的现代数字化城市公交查询系统论文(四)

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️​​​​​​​⬆️…

音视频入门基础:像素格式专题(1)——RGB简介

一、像素格式简介 像素格式&#xff08;pixel format&#xff09;指像素色彩按分量的大小和排列。这种格式以每个像素所使用的总位数以及用于存储像素色彩的红、绿、蓝和 alpha 分量的位数指定。在音视频领域&#xff0c;常用的像素格式包括RGB格式和YUV格式&#xff0c;本文…

a-table 控制列的展示和隐藏

一、业务场景&#xff1a; 最近在使用 Antd-vue 组件库的时候&#xff0c;a-table需要根据不同角色的权限显示和隐藏 columns的列 为了避免大家走弯路&#xff0c;为大家整理了一下&#xff0c;粘走可以直接用的那种 二、具体实现步骤&#xff1a; 1.在需要显示与隐藏的列增加一…

制定语音芯片的语音识别指令时需要关注的内容

背景 最近定义设备识别的语音指令以及对应的语音反馈。虽然语音控制在软件里只是很小的一块功能&#xff0c;但也不能太马虎。新人入坑就要学习&#xff0c;学习前人的经验规避问题&#xff0c;最后总结经验给后人&#xff0c;给未来的自己。好记性不如烂笔头~ 下面一些问题是…

1700java进销存管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

一、源码特点 java web进销存管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为sqlser…

『FPGA通信接口』DDR(3)DDR3颗粒读写测试

文章目录 前言1.配套工程简介2.测试内容与策略3. 测试程序分析4.程序结果分析5.一个IP控制两颗DDR36.传送门 前言 以四颗MT41K512M16HA-125AIT颗粒为例&#xff0c;介绍如何在一块新制板卡上做关于DDR3的器件测试。前面两篇介绍了什么是DDR&#xff0c;并介绍了xilinx给出的FPG…

基于Springboot的音乐翻唱与分享平台

基于SpringbootVue的音乐翻唱与分享平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 音乐资讯 音乐翻唱 在线听歌 后台登录 后台首页 用户管理 音乐资讯管理…

Elasticsearch:探索 11 种流行的机器学习算法

作者&#xff1a;来自 Elastic Elastic Platform Team 过去几年中&#xff0c;机器学习&#xff08;ML&#xff09;已经悄然成为我们日常生活中不可或缺的一部分。它影响着从购物网站和流媒体网站上的个性化推荐&#xff0c;到保护我们的收件箱免受我们每天收到的大量垃圾邮件的…

3.9设计模式——Strategy 策略模式(行为型)

意图 定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使他们可以相互替换此模式使得算法可以独立于使用它们的客户而变化 结构 Strategy&#xff08;策略&#xff09;定义所有支持的算法的公共入口。Context使用这个接口来调用某ConcreteStrategy定义的方…

手撕spring框架(2)

相关系列 java中spring底层核心原理解析&#xff08;1&#xff09;-CSDN博客 java中spring底层核心原理解析(2)-CSDN博客 手撕spring框架&#xff08;1&#xff09;-CSDN博客 依赖注入原理 依赖注入(Dependency Injection&#xff0c;简称DI)是一种设计模式&#xff0c;它允许我…

DS高阶:图论基础知识

一、图的基本概念及相关名词解释 1.1 图的基本概念 图是比线性表和树更为复杂且抽象的结&#xff0c;和以往所学结构不同的是图是一种表示型的结构&#xff0c;也就是说他更关注的是元素与元素之间的关系。下面进入正题。 图是由顶点集合及顶点间的关系组成的一种数据结构&…

深入浅出DBus-C++:Linux下的高效IPC通信

目录标题 1. DBus简介2. DBus-C的优势3. 安装DBus-C4. 使用DBus-C初始化和连接到DBus定义接口和方法发送和接收信号 5. dbus-cpp 0.9.0 的安装6. 创建一个 DBus 服务7. 客户端的实现8. 编译和运行你的应用9. 瑞芯微&#xff08;Rockchip&#xff09;的 Linux 系统通常会自带 db…

上位机开发PyQt(五)【Qt Designer】

PyQt5提供了一个可视化图形工具Qt Designer&#xff0c;文件名为designer.exe。如果在电脑上找不到&#xff0c;可以用如下命令进行安装&#xff1a; pip install PyQt5-tools 安装完毕后&#xff0c;可在如下目录找到此工具软件&#xff1a; %LOCALAPPDATA%\Programs\Python\…

智能体可靠性的革命性提升,揭秘知识工程领域的参考架构新篇章

引言&#xff1a;知识工程的演变与重要性 知识工程&#xff08;Knowledge Engineering&#xff0c;KE&#xff09;是一个涉及激发、捕获、概念化和形式化知识以用于信息系统的过程。自计算机科学和人工智能&#xff08;AI&#xff09;历史以来&#xff0c;知识工程的工作流程因…
最新文章