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

news/2024/10/18 12:19:21/

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

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

使用场景:动态菜单

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

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

为什么使用递归

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

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

递归在动态菜单中的实现

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

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

DynamicMenu.vue

<template><el-menu class="el-menu-vertical-demo"><!-- 递归生成菜单 --><menu-itemv-for="(item, index) in menuData":key="index":item="item":index="index.toString()"/></el-menu>
</template><script lang="ts" setup>javascript">
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-itemv-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>javascript">
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.ppmy.cn/news/1446920.html

相关文章

「AIGC」如何理解大语言模型

一、Transformer模型 Transformer模型是一种基于自注意力机制的架构&#xff0c;由Vaswani等人在2017年的论文《Attention Is All You Need》中首次提出。它主要用于处理序列到序列的任务&#xff0c;如机器翻译、文本摘要等。 案例&#xff1a;机器翻译 假设我们想将英文句子…

设计模式-01 设计模式单例模式

设计模式-01 设计模式单例模式 目录 设计模式-01 设计模式单例模式 1定义 2.内涵 3.使用示例 4.具体代码使用实践 5.注意事项 6.最佳实践 7.总结 1 定义 单例模式是一种设计模式&#xff0c;它确保一个类只能被实例化一次。它通过在类内部创建类的唯一实例并提供一个全…

sparkctl x86/arm不同平台编译使用

目录 1.sparkctl简介 2.环境准备 3.sparkctl编译 1.sparkctl简介 sparkctl是 Spark Operator 的一个命令行工具,用于创建、列出、检查状态、获取日志和删除SparkApplication。它还可以进行从本地端口到 Spark Web UI 端口的端口转发,以访问驱动程序上的 Spark Web UI。每个…

UNI-APP_拨打电话权限如何去掉,访问文件权限关闭

uniapp上架过程中一直提示&#xff1a;允许“app名”拨打电话和管理通话吗&#xff1f; uniapp配置文件&#xff1a;manifest.json “permissionPhoneState” : {“request” : “none”//拨打电话权限关闭 }, “permissionExternalStorage” : {“request” : “none”//访…

如何在Linux服务器上安装Stable Diffusion WebUI

如何在Linux服务器上安装Stable Diffusion WebUI 一、前提条件1、硬件条件2、软件条件 二、安装步骤1、创建Python虚拟环境2、安装必要的软件和库3、克隆Stable Diffusion WebUI仓库4、安装依赖5、运行6、访问WEB UI 一、前提条件 1、硬件条件 GPU&#xff1a;显存肯定越大越…

特斯拉PIXCELL矩阵大灯擎耀远程控制技术照亮未来智能之光

在科技的浪潮中&#xff0c;特斯拉这个名字如同一道闪电&#xff0c;照亮了新能源汽车的天空。而在这片星空中&#xff0c;特斯拉PIXCELL矩阵大灯则如同一颗璀璨的星辰&#xff0c;以其独特的创新技术和卓越的性能&#xff0c;为驾驶者提供了前所未有的照明体验。矩阵大灯技术如…

【小沐学Java】VSCode搭建Java开发环境

文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器&#xff0c;可在桌面上…

测试工程师面试准备(软硬件)

您好&#xff0c;我叫XXX。学历XX&#xff0c;XXX专业毕业。X年X月份毕业&#xff0c;但是去年二月份已经找到工作开始实习了&#xff0c;目前工作一年了&#xff0c;这一年的过程中我主要负责软件的开发和测试和软硬件联调测试工作。具体来说就是&#xff0c;在软件开发完成后…