多级侧边菜单(递归)

news2024/9/28 23:03:03

在这里插入图片描述

需要编写两个文件 aside-menu.vue 和 menu-item.vue

  1. menu-item.vue
<script setup>
defineOptions({name: 'MenuItem'})
defineProps({menuList: Array})
</script>

<template>
  <template v-for="menu of menuList">
    <!-- 如果当前有子菜单,则显示 el-sub-menu ,在el-sub-menu 里调用 递归组件 -->
    <el-sub-menu
        v-if="menu.children && menu.children.length > 0"
        :index="menu.path"
    >
      <template #title>
        <el-icon>
          <component :is="menu.icon"></component>
        </el-icon>
        <span>{{ menu.name }}</span>
      </template>
      <!-- 调用自身  此处是重点-->
      <MenuItem :menuList="menu.children"></MenuItem>
    </el-sub-menu>
    <!-- 如果没有子菜单,则显示当前内容 -->
    <el-menu-item v-else :index="menu.path">
      <el-icon>
        <component :is="menu.icon"></component>
      </el-icon>
      <template #title>
        <span>{{ menu.name }}</span>
      </template>
    </el-menu-item>
  </template>
</template>

<style lang="scss" scoped>

</style>

  1. aside-menu.vue (menuList在该组件中请求后端接口获取)
<script setup>
import MenuItem from "./menu-item.vue";

defineProps({
  isCollapse: {
    type: Boolean,
    default: true
  }
})
// 菜单列表
let menuList = [
  {
    path: '/',
    name: '首页',
    icon: 'HomeFilled'
  },
  {
    path: '/about',
    name: '关于',
    icon: 'document'
  },
  {
    path: '/test',
    name: '测试',
    icon: 'Star',
    children: [
      {
        path: '/test/test1',
        name: '测试1',
        icon: 'Star',
      },
      {
        path: '/test/test2',
        name: '测试2',
        icon: 'Star',
        children: [
          {
            path: '/test/test2/test1',
            name: '测试1',
            icon: 'Star',
          },
        ]
      },
      {
        path: '/test/test3',
        name: '测试3',
        icon: 'Star',
        hidden: true,
      }
    ],
  },
  {
    path: '/test2',
    name: '测试2',
    icon: 'Star',
    children: [
      {
        path: '/test2/test1',
        name: '测试1',
        icon: 'Star',
        hidden: true,
      },
    ]
  },
]

//通过递归 将 menuList 属性hidden为true的菜单及其子菜单过滤掉
function filterHiddenMenu(menuList) {
  return menuList.filter(menu => {
    if (menu.children) {
      menu.children = filterHiddenMenu(menu.children)
    }
    return !menu.hidden
  })
}

menuList = filterHiddenMenu(menuList)
</script>

<template>
  <div>
    <el-menu :collapse="isCollapse" :collapse-transition="false">
      <MenuItem :menu-list="menuList"></MenuItem>
    </el-menu>
  </div>
</template>

<style lang="scss" scoped>
.el-menu {
  height: 100%;
  width: 100%;
}
</style>

  1. 使用我们编写的 aside-menu组件
<script setup>
import {ref} from "vue";
import AsideMenu from "./aside-menu/index.vue";

// 是否折叠菜单,默认折叠
const isCollapse = ref(true)

</script>

<template>
    <AsideMenu :isCollapse="isCollapse"></AsideMenu>
</template>

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索JMeterTools:一个Python驱动的JMeter脚本生成器

JMeterTools 简介 JMeterTools 是一个由 Python 编写的开源项目&#xff0c;旨在帮助测试人员快速生成 JMeter 测试脚本。通过简单的 Python API&#xff0c;用户可以方便地定义测试计划、线程组、HTTP 请求等&#xff0c;可以结合接口自动化测试项目&#xff0c;将接口自动化…

电子数据交换EDI 835 的处理

电子数据交换 (EDI) 835 电子数据交换 (EDI) 835 医疗保健索赔付款和汇款通知 电子数据交换 835 专注于交换医疗保健付款和福利信息。HIPAA 标准的更新版本 HIPAA 5010 指定了此交易集的格式、结构、数据字段和元素。医疗保险计划在与医疗保健提供者沟通以付款、提供福利…

如何快速降低文章重复率?试试芝士AI,智能降痕省时省力

论文查重的原理是连续出现13个字符类似就判断为重复部分&#xff0c;并将重复的内容计算到论文的重复率之中。 芝士AI官网&#xff1a;https://www.paperzz.cn/ 芝士AI论文查重系统会对内容进行分层处理&#xff0c;按照篇章&#xff0c;段落&#xff0c;句子等层级分别创建指…

江科大笔记——新建工程

STM32的开发方式 目前STM32的开发方式主要有基于寄存器的方式、基于标准库的方式&#xff08;库函数的方式&#xff09;、基于HAL库的方式&#xff1a; 基于库函数的方式是使用ST官方提供的封装好的函数&#xff0c;通过调用这些函数来间接地配置寄存器。基于HAL库的方式可以…

8000多道超全题库+高频题+大厂面试官原创题解+真实面经,绝对的求职秘密武器

正在找工作或者想要提升技术的程序员都可以去试试这款刷题神器【面试鸭】。你能想到的各种题目都被整理得明明白白&#xff0c;再也不用自己到处找七零八落的资料。8000多道超全题库高频题大厂面试官原创题解真实面经&#xff0c;绝对的求职秘密武器&#xff0c;扫码即可体验⬇…

数据结构:树、森林

二叉树与树结构差异 树&#xff08;一般树&#xff09;&#xff1a;树是一种数据结构&#xff0c;其中每个节点可以有任意数量的子节点&#xff08;除了根节点和叶子节点外&#xff09;。因此&#xff0c;一般树的节点在数组中的表示并不是那么直接&#xff0c;特别是当树不是完…

赵长鹏今日获释,下一步会做什么?币安透露2024年加密货币牛市的投资策略!

中国时间2024年9月28日&#xff0c;加密货币行业的风云人物赵长鹏&#xff08;Changpeng Zhao&#xff0c;简称CZ&#xff09;终于从监狱获释。他因在担任币安首席执行官期间未能有效执行反洗钱(AML)计划而被判刑四个月。赵长鹏的获释引发了广泛关注&#xff0c;不仅因为他是全…

一不小心,给腾讯云提了一个Bug

大家好&#xff0c;这里是程序员晚枫。 我使用腾讯的cos服务2年多了&#xff0c;一直都是在网页手动管理资源。 最近身边有高人”突发奇想“&#xff1a;要不自己封装一个专用的api&#xff1f;于是苦命打工人晚枫上线&#xff0c;吭哧吭哧把腾讯已经封装很好的Python SDK又包…

企业微信(企微)审批与影刀RPA结合

企业微信审批与影刀RPA结合 效果先看视频&#xff1a; 影刀与企业微信审批结合 具体步骤&#xff1a; 1、登录企微管理后台&#xff0c;新建一个审批流。 添加模板→自定义模板&#xff0c;根据需求添加审批节点。 添加完之后&#xff0c;回到审批界面&#xff0c;可以看…

Java新手指南:从菜鸟到编程大师的趣味之路-多态

这里是Themberfue 本章讲的是Java三大特性之一的多态&#xff0c;也是最后一个特性 多态概念 既然我们要学习多态&#xff0c;首先得知道这玩意儿到底是个什么东西&#xff1f; 通俗地说&#xff0c;多态其实就是多种形态。具体来说就是去完成某个行为&#xff0c;当不同的对象…

win11电脑长时间锁屏会变得非常卡(rundll.32过多)——解决方法

一、问题 当你长时间锁屏后&#xff0c;电脑会变得十分的卡&#xff0c;有些甚至会死机崩溃&#xff0c;这个时候你可能并不需要修改电源的计划设置&#xff0c;也可能并不需要修改电脑注册表之类的东西。 赶紧打开你的任务管理器&#xff0c;winx&#xff0c;选择任务管理器…

利士策分享,攀登职场高峰:成功者的十大特质

利士策分享&#xff0c;攀登职场高峰&#xff1a;成功者的十大特质 在职场这个竞争激烈的舞台上&#xff0c;那些能够迅速崛起、实现职业辉煌的佼佼者&#xff0c;往往凭借一系列独特且鲜明的特质脱颖而出。以下是对这些特质的深入探讨&#xff1a; 第一章&#xff1a;高情商的…

Elasticsearch学习笔记(1)

初识 Elasticsearch 认识和安装 Elasticsearch 是由 Elastic 公司开发的一套强大的搜索引擎技术&#xff0c;属于 Elastic 技术栈的一部分。完整的技术栈包括&#xff1a; Elasticsearch&#xff1a;用于数据存储、计算和搜索。Logstash/Beats&#xff1a;用于数据收集。Kib…

代码为笔,合作作墨,共绘共赢画卷———未来之窗行业应用跨平台架构

合作共赢&#xff0c;代码同创&#xff0c;成就非凡 一、资源整合方面 1.1. 技术资源共享 - 不同的合作伙伴可能在技术领域各有所长。例如&#xff0c;一方可能擅长前端用户界面设计&#xff0c;具有丰富的交互设计经验&#xff0c;能够打造出美观、易用的预订界面&#xff…

云舟观测:集成开源Grafana Faro构建前端页面性能监控平台

在当今互联网时代&#xff0c;面对纷乱繁杂的网上资源&#xff0c;用户的耐心和注意力是极为宝贵的资源&#xff0c;当用户访问一个网站或应用时&#xff0c;他们期望的是快速且无缝的体验&#xff0c;任何加载延迟或功能故障都可能导致用户流失&#xff0c;影响品牌体验。因此…

MySQL 中的 FOREIGN KEY 约束:确保数据完整性的关键

在 MySQL 数据库中&#xff0c;FOREIGN KEY&#xff08;外键&#xff09;约束是一种非常重要的机制&#xff0c;它可以帮助我们确保数据的完整性和一致性。那么&#xff0c;FOREIGN KEY 约束究竟是什么呢&#xff1f;让我们一起来深入了解一下。 一、什么是 FOREIGN KEY 约束&…

计算机毕业设计 招生宣传管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

支付宝远程收款api之小荷包跳转码

想要生成小荷包跳转码的二维码&#xff0c;需要进行以下步骤&#xff1a; 1、开通支付宝小荷包的收款功能权限 2、获取支付宝的小荷包收款码和支付宝账户的UID已经手机号等相应信息&#xff08;可能会有变动&#xff09; 3、可能需要一定的代码基础&#xff0c;讲所需信息填…

基于python+控制台+txt文档实现学生成绩管理系统(含课程实训报告)

目录 第一章 需求分析 第二章 系统设计 2.1 系统功能结构 2.1.1 学生信息管理系统的七大模块 2.1.2 系统业务流程 2.2 系统开发必备环境 第三章 主函数设计 3.1 主函数界面运行效果图 3.2 主函数的业务流程 3.3 函数设计 第四章 详细设计及实现 4.1 学生信息录入模块的设计与实…

2024.9.28 作业+思维导图

widget.cpp #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setFixedSize(320,448);this->setWindowFlag(Qt::FramelessWindowHint);//QPushButtonQPushButton *PushButton1 new QPushButton("登录",this);PushButto…