Element plus使用menu时候如何在折叠时候隐藏掉组件自带的小箭头

记录一下工作中使用element plus时候遇到的一个小bug

就是这个小箭头太折磨人了,因为我需要根据路由动态加载menu,所以对这个menu组件进行了一些处理,然后可能是因为破坏了它原来的层级关系吧导致折叠菜单的时候这个小箭头还在(官网的这个是会隐藏掉的)

后来我看了一下它的css,大概就是折叠的时候会在menu上加一个类类名为.el-menu--collapse然后可以根据这个类名进行item的名字隐藏

<style scoped lang="scss">
.menu-title {font-size: 14px;
}.el-menu--collapse .el-sub-menu__title span {display: none;
}.el-menu--collapse .el-menu-item span {display: none;
}
</style>

这样也就隐藏了文本但是这个小箭头很顽固不能隐藏,于是我尝试在用一个不带scoped的style就把这个箭头隐藏了

<style scoped lang="scss">
.menu-title {font-size: 14px;
}.el-menu--collapse .el-sub-menu__title span {display: none;
}.el-menu--collapse .el-menu-item span {display: none;
}
</style>
<style>
.el-menu--collapse .el-sub-menu .el-sub-menu__title .el-sub-menu__icon-arrow {display: none;
}
</style>

到这里bug就解决了,这个细节虽然小但是很不雅观

根据路由动态渲染menu

讲到了动态渲染menu顺带记录一下吧

思想很简单就是根据路由去递归嘛然后由于菜单分为目录菜单el-sub-menu和功能菜单el-menu-item,这里目录菜单呢就是点击展开然后它的里面又可能包含了多个功能菜单

这里就有思路了,根据路由来看没有children的就是功能菜单,有children且长度不为0的就是目录菜单然后目录菜单下可能也有目录菜单显然就需要递归一下。

//MenuComponent.vue 这个就是整个menu
<template><el-menu:default-active="activeIndex"class="el-menu-vertical-demo":collapse="isCollapse"background-color="#545c64"text-color="#fff"active-text-color="#ffd04b"router><div class="scroll-container"><template v-for="item in filteredRoutes" :key="item.path"><MenuItem :item="item" :isCollapse="props.isCollapse" /></template></div></el-menu>
</template><script setup lang="ts">
import { ref, defineProps, defineComponent, computed } from 'vue'
import MenuItem from './MenuItem.vue'const props = defineProps({routes: Array,activeIndex: String,isCollapse: Boolean
})
const filteredRoutes = computed(() => {if (props.routes?.length) {return props.routes.filter((route: any) => {if (route.meta && route.meta.show === false) {return false}if (route.children) {route.children = route.children.filter((child: any) => {return !(child.meta && child.meta.show === false)})}return true})} else {return []}
})console.log(filteredRoutes.value)
</script><style scoped>
.el-menu-vertical-demo:not(.el-menu--collapse) {width: 200px;min-height: 400px;
}.menu-title {font-size: 14px;
}.scroll-container {max-height: calc(100vh - 60px); /* 调整这里的值以适应你的布局 */overflow-y: auto;scrollbar-width: none; /* Firefox */-ms-overflow-style: none; /* IE and Edge */
}/* WebKit browsers (Safari, Chrome) */
.scroll-container::-webkit-scrollbar {display: none; /* 隐藏滚动条 */
}</style>
//MenuItem.vue 这个就是相应的菜单项,由于有el-sub-menu和el-menu-item两种我们这里进行了一个判断并且在组件中进行了一个递归,这样不管是几级的目录我们都可以动态渲染,具有一定可扩展性
<template><el-sub-menuv-if="item.children && item.children.length > 0":index="item.path":popper-append-to-body="false"><template #title><el-icon v-if="item.meta?.icon"><component :is="item.meta.icon" /></el-icon><span class="menu-title">{{ item.meta?.title }}</span></template><template v-for="child in item.children" :key="child.path"><MenuItem :item="child" :is-collapse="isCollapse" /></template></el-sub-menu><el-menu-item v-else :index="item.path"><el-icon v-if="item.meta?.icon"><component :is="item.meta.icon" /></el-icon><template #title><span class="menu-title">{{ item.meta?.title }}</span></template></el-menu-item>
</template><script setup lang="ts">
import { defineProps, watch } from 'vue'const props = defineProps({item: {type: Object,required: true},isCollapse: {type: Boolean,default: false}
})
</script><style scoped lang="scss">
.menu-title {font-size: 14px;
}.el-menu--collapse .el-sub-menu__title span {display: none;
}.el-menu--collapse .el-menu-item span {display: none;
}
</style>
<style>
.el-menu--collapse .el-sub-menu .el-sub-menu__title .el-sub-menu__icon-arrow {display: none;
}
</style>

然后就是使用这个组件了一般是在总布局的侧边栏

      <MenuComponent:routes="routes" // routes 是路由列表可以直接导入自己写的路由列表:activeIndex="activeIndex" //这个是记录当前选中的index:isCollapse="isCollapse" //这里传递是否折叠/>//注意在使用这个组件的布局页面要监听一下activeIndex的变化
// 使用 watch 监听路由变化
watch(() => route.path,newPath => {activeIndex.value = newPath},{ immediate: true } // 初始化时立即同步一次
)//路由中每一项加入meta
meta: {title: '短信记录',icon: getIconComponent('Document'), //获取element plus中的图标getIconComponent这个是我自定义的方法show: true //是否显示在菜单中}//getIconComponent导入icon的方法如下import * as Icons from '@element-plus/icons-vue'
import type { Component } from 'vue'const iconMap: Record<string, Component> = Iconsexport function getIconComponent(iconName: string): Component | undefined {return iconMap[iconName]
}

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

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

相关文章

语义通信论文略读(七)Contrastive Learning-Based Semantic Communications

Contrastive Learning-Based Semantic Communications 基于对比学习的语义通信 作者: Shunpu Tang, Qianqian Yang, Lisheng Fan, Xianfu Lei, Arumugam Nallanathan, George K. Karagiannidis 所属机构: 广州大学计算机科学与网络安全学院&#xff0c;浙江大学信息科学与电…

windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解

1、下载mysql开发库,后面驱动编译的时候需要引用到,下载地址:mysql开发库下载 2、使用everything搜索:msvc-version.conf,用记事本打开,添加:QMAKE_MSC_VER=1909。不然msvc下的mysql源码加载不上。

技术栈2:Git分布式版本控制工具

目录 1.版本控制器 2.Git概述 3.Git常用命令 4.获取本地仓库 5.基础操作指令 6.gitignore文件 7.分支与合并 8.远程仓库 1.版本控制器 1.1集中式版本控制器 集中式版本控制工具&#xff0c;版本库是集中存放在中央服务器的&#xff0c;team里每个人work时…

【ARM Coresight OpenOCD 系列 5 -- arp_examine 使用介绍】

文章目录 OpenOCD arp_examine 使用 OpenOCD arp_examine 使用 因为我们很多时候运行 Openocd 的时候有些 core 还没有启动, 所以最好在配置脚本中添加 -defer-examine这个参数, 如下&#xff1a; #cortex-m33 target create ${_CHIPNAME}.m33 cortex_m -dap ${_CHIPNAME}.da…

计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

CAN总线位同步的使用以及总线仲裁规则详解

目录 1. 位同步 1.1 位时序 1.2 硬同步 1.3 再同步 1.4 波特率计算 2. 仲裁 2.1 先占先得 2.2 非破坏性仲裁 1. 位同步 CAN总线没有时钟线&#xff0c;总线上的所有设备通过约定波特率的方式确定每一个数据位的时长&#xff0c;发送方以约定的位时长每隔固定时…

Python爬虫开发中的分析与方案制定

网站分析作为获取数据的重要手段&#xff0c;其重要性不言而喻。Python作为一种强大的编程语言&#xff0c;因其简洁的语法和强大的库支持&#xff0c;成为开发爬虫的首选工具。本文将深入探讨Python爬虫开发中的分析与方案制定&#xff0c;并在代码中加入代理信息&#xff0c;…

深入理解接口测试:实用指南与最佳实践5.0(一)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

基于Matlab 火焰识别技术

课题介绍 森林承担着为人类提供氧气以及回收二氧化碳等废弃气体的作用&#xff0c;森林保护显得尤其重要。但是每年由于火灾引起的事故不计其数&#xff0c;造成重大的损失。如果有一款监测软件&#xff0c;从硬件处获得的图像中监测是否有火焰&#xff0c;从而报警&#xff0…

Python酷库之旅-第三方库Pandas(209)

目录 一、用法精讲 976、pandas.MultiIndex.set_codes方法 976-1、语法 976-2、参数 976-3、功能 976-4、返回值 976-5、说明 976-6、用法 976-6-1、数据准备 976-6-2、代码示例 976-6-3、结果输出 977、pandas.MultiIndex.to_frame方法 977-1、语法 977-2、参数…

SQL 窗口函数

窗口函数用于在不改变查询结果集行数的情况下&#xff0c;对每一行执行聚合计算或其他复杂的计算&#xff0c;可以跨行计算。 随着窗口函数的出现&#xff0c;无须再使用关联子查询。窗口函数的可读性很好&#xff0c;代码也很简洁。 1 实践 1.1 营业额年度变化 需求&#…

36.Redis核心设计原理

本文针对前面的讲解做一次总结 1.Redis基本特性 1.非关系型的键值对数据库&#xff0c;可以根据键以O(1)的时间复杂度取出或插入关联值 2.Redis的数据是存在内存中的 3.键值对中键的类型可以是字符串&#xff0c;整型&#xff0c;浮点型等&#xff0c;且键是唯一的 4.键值对中…

《人工智能网络安全现状(2024)》深度解读:机遇、挑战与应对策略

在当今数字化浪潮汹涌澎湃的时代&#xff0c;人工智能&#xff08;AI&#xff09;与网络安全已然深度交融&#xff0c;二者相互作用所塑造的发展态势正深刻重塑着我们的信息安全格局。《人工智能网络安全现状&#xff08;2024&#xff09;》这份报告恰似一盏明灯&#xff0c;为…

光控资本 :股票支撑位是什么?股票支撑位怎么找?

股票支撑位是指在股票价格的前史K线走势有两次或者两次以上&#xff0c;出现下跌到某一方位&#xff0c;股票就出现反弹的走势&#xff0c;则投资者可以把这个方位称为支撑位&#xff0c;支撑位阐明下方托单较多&#xff0c;个股无法持续下跌&#xff0c;在托单的影响下&#x…

网站小程序app怎么查有没有备案?

网站小程序app怎么查有没有备案&#xff1f;只需要官方一个网址就可以&#xff0c;工信部备案查询官网地址有且只有一个&#xff0c;百度搜索 "ICP备案查询" 找到官方gov.cn网站即可查询&#xff01; 注&#xff1a;网站小程序app备案查询&#xff0c;可通过输入单位…

STM32+AI语音识别智能家居系统

基于 STM32 和 AI 语音识别的智能家居系统的详细硬件和软件设计&#xff0c;包括各个模块的详细描述和代码示例。 一、硬件设计 1. 微控制器&#xff08;STM32&#xff09;&#xff1a; 选择 STM32F7 系列或更高性能的芯片&#xff0c;如 STM32F767ZIT6&#xff0c;以满足处理…

【初阶一】初识c语言

【初阶一】初识c语言 一、为什么学C语言&#xff1f;二、学习前的准备1.搭建编译环境以及使用2.代码库GitHub/Gitee创建以及使用3.写博客的作用以及教学 三、个人感悟 一、为什么学C语言&#xff1f; C语言是一门经久不衰的计算机编程语言&#xff0c;有句话叫&#xff1a;万物…

Linux DRM 那些事 - HDMI 接口 DTS 配置

本文基于RockPI 4A单板Debian系统 Linux 4.4 内核介绍DRM框架HDMI接口DTS配置。 在DTS中主要实现&#xff1a;HDMI的使能、VOP绑定、IOMUX引脚配置和HDMI控制器配置。 一、HDMI 配置 文件&#xff1a;arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi #include "rk3…

QT仿QQ聊天项目,第三节,实现聊天界面

一&#xff0c;界面控件示意图 界面主要由按钮QPushButton,标签QLabel,列表QListWidget 要注意的是QListWidget既是实现好友列表的控件&#xff0c;也是实现聊天气泡的控件 二&#xff0c;控件样式 QPushButton#btn_name {border:none;}QPushButton#btn_close {border:1px;bac…

前端学习八股资料CSS(二)

更多详情&#xff1a;爱米的前端小笔记&#xff0c;更多前端内容&#xff0c;等你来看&#xff01;这些都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&#x1f914;哦&#xff01;你们的支持才是我不断更新的动力&#xff01;找…