探究 Element Plus Menu 横向多层级展开组件的 Bug 及解决方案

news2024/11/26 15:36:33

文章目录

  • 1 ellipsis 是否省略多余的子项(仅在横向模式生效)
    • 问题描述
    • 解决方案
  • 2 多个级别的子菜单位置错乱或默认直接展开
    • 问题描述
    • 解决方案
      • 1 index没有设置
      • 2 通用策略

在这里插入图片描述

1 ellipsis 是否省略多余的子项(仅在横向模式生效)

问题描述

递归复杂menu时候,莫名其妙的ellipsis属性不生效,递归组件如下:

<script setup>
defineProps({
  menuData: {
    type: Array,
    default: () => []
  }
})
</script>
<!-- 莫名其妙有bug 横版不显示省略号 -->
<template>
  <template v-for="(item, index) in menuData" :key="index">
    <el-sub-menu  v-if="item.children && item.children.length" :index="item.path">
      <template #title>
        {{ item.meta.title }}
      </template>
      <MenuItems :menu-data="item.children"/>
    </el-sub-menu>
    <template v-else>
      <!-- ismenu == true 才显示 -->
      <el-menu-item v-if="item.meta.ismenu" :index="item.path">
        {{ item.meta.title }}
      </el-menu-item>
    </template>
  </template>
</template>

<style scoped>

</style>

这个递归组件写法其实是正确的,可是在新版Menu组件中有BUG,这里不能在本组件中尝试整体渲染所有item。

解决方案

如果改成在外部做v-for遍历item可解决该问题,参考如下:

<template>
  <div class="catalog">
    <el-menu
        :default-active="activeIndex"
        class="el-menu-demo"
        mode="horizontal"
        @select="handleSelect"
        router
        ellipsis
    >
      <MenuItems v-for="(item, index) in menuData" :key="index" :edata="item"/>
      <!--<MenuItems :menu-data="menuData"/>-->
    </el-menu>
  </div>

  <router-view v-slot="{ Component, route }">
    <!-- <keep-alive>
      <component :is="Component" v-if="route.meta.keepalive == true" :key="route.path" />
    </keep-alive>
    <component :is="Component" v-if="route.meta.keepalive == false" :key="route.path" /> -->
    <keep-alive :include="keepaliveRoutes">
      <component class="p-10" :is="Component" :key="route.path"/>
    </keep-alive>
  </router-view>

</template>

<script lang="ts" setup>
import {defineComponent, onMounted, PropType, ref} from "vue";
import {routes} from "../router"
// import MenuItems from "./MenuItems.vue";

const keepaliveRoutes = ref<string[]>([])
const activeIndex = ref('AccessibleMap') // 默认选中菜单-AccessibleMap 即路由配置的path
const menuData = ref<Record<any, any>>([]) // 菜单数据

routes[0].children.forEach(e => {
  if (e.meta.keepalive) {
    keepaliveRoutes.value.push(e.path)
  }
})

menuData.value = routes[0].children

const handleSelect = (key: string, keyPath: string) => {
  console.log(key, keyPath)
}

const MenuItems = defineComponent({
  name: 'MenuItems',
  props: ['edata'],

  template: `
    <el-sub-menu v-if="edata.children && edata.children.length > 0" :index="edata.path">
      <template #title>
        {{ edata.meta.title }}
      </template>
      <MenuItems v-for="(item, index) in edata.children" :key="index" :edata="item"/>
    </el-sub-menu>
    <template v-else>
      <el-menu-item v-if="edata.meta.ismenu" :index="edata.path">
        {{ edata.meta.title }}
      </el-menu-item>
    </template>
  `,
  setup(props) {
  },
})
</script>
<style scoped lang="scss">
.catalog {
  height: 60px;
}
</style>

可以查看开源代码:whr2349/study-openlayers

2 多个级别的子菜单位置错乱或默认直接展开

问题描述

在使用 Element Plus 的 Menu 组件时,我们可能希望构建一个复杂的导航系统,其中包括多个级别的子菜单。在默认的纵向布局下,Menu 组件表现良好,能够完美展示多级子菜单。然而,在某些应用场景中,我们可能需要一个横向的菜单布局,此时问题就显现出来了。
当你尝试将 Menu 组件设置为横向(mode=“horizontal”)并且包含多级子菜单时,可能会发现子菜单的显示存在问题。具体来说,子菜单可能无法正确地展开,或者展开时的样式和位置不符合预期,尤其是在涉及到第三级或更深层次的菜单项时。

解决方案

1 index没有设置

绝大多数情况是因为el-sub-menu这个组件没有index,如果你打开router属性,那么el-sub-menu组件也必须绑定index

2 通用策略

解决此类问题通常需要从以下几个方面入手:

  1. CSS 定位调整:检查并调整相关的 CSS 样式,确保子菜单能够正确定位。这可能涉及到绝对定位、相对定位以及 z-index 的调整。
  2. 响应式设计:确保你的布局能够适应不同的屏幕尺寸,避免在小屏幕上出现布局混乱。
  3. 事件监听:监听窗口大小变化,或者菜单项的 hover 事件,动态调整子菜单的显示状态和位置。

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

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

相关文章

Global Structure-from-Motion Revisited golmap论文翻译

Global Structure-from-Motion Revisited Paper&#xff1a;https://demuc.de/papers/pan2024glomap.pdf Code&#xff1a;https://github.com/colmap/glomap 摘要- 从图像中恢复三维结构和摄像机运动一直是计算机视觉研究的热点&#xff0c;被称为运动结构恢复(SfM)。这个问…

【RAG提升技巧】查询改写HyDE

简介 提高 RAG 推理能力的一个好方法是添加查询理解层 ——在实际查询向量存储之前添加查询转换。以下是四种不同的查询转换&#xff1a; 路由&#xff1a;保留初始查询&#xff0c;同时查明其所属的适当工具子集。然后&#xff0c;将这些工具指定为合适的选项。查询重写&…

[论文笔记]ZeRO: Memory Optimizations Toward Training Trillion Parameter Models

引言 今天带来ZeRO: Memory Optimizations Toward Training Trillion Parameter Models的论文笔记。 大型深度模型提供了显著的准确性提升&#xff0c;但训练数十亿到数万亿个参数是具有挑战性的。现有的解决方案&#xff0c;如数据并行和模型并行&#xff0c;存在基本的局限…

汇昌联信做拼多多电商如何提升浏览量?

在拼多多电商平台上&#xff0c;如何提升商品的浏览量是每个卖家都关注的问题。高浏览量不仅意味着更多的潜在客户&#xff0c;还能间接提升销量和店铺的知名度。汇昌联信作为电商运营者&#xff0c;需要采取有效策略来吸引消费者的注意力。 一、优化商品标题和描述 商品标题是…

LDR6328Q:重塑电源管理新境界的取电芯片

在电子设备日益普及的今天&#xff0c;高效、智能的电源管理成为了提升用户体验的关键因素之一。而LDR6328Q作为一款专为设备端设计的取电芯片&#xff0c;凭借其出色的性能和创新的技术&#xff0c;正逐步成为电源管理领域的一颗璀璨新星。本文将深入探讨LDR6328Q取电芯片的特…

大模型面经,不要到处找了,收藏我这一篇就够了

在当前技术快速发展的背景下&#xff0c;大模型领域的职位成为了许多求职者的热门选择。为了帮助大家更好地准备面试&#xff0c;这里整理了一份大模型面试经验分享&#xff0c;涵盖了一些常见的面试流程、可能遇到的技术问题以及面试官可能会问到的行为问题等。 大模型面试经…

什么是实时数据仓库? 优势与最佳实践

在当今数据驱动的世界中&#xff0c;许多企业使用实时数据仓库来满足其分析和商业智能 (BI) 需求。这使他们能够做出更好的决策、推动增长并为客户提供价值。 数据仓库是一种数据存储和管理系统&#xff0c;其设计目标只有一个&#xff1a;管理和分析数据&#xff0c;以实现商…

链表求和问题(面试题)

目录 一题目&#xff1a; 二思路汇总&#xff1a; 三解答代码&#xff1a; 一题目&#xff1a; leetcode题目链接 &#xff1a;面试题 02.05. 链表求和 - 力扣&#xff08;LeetCode&#xff09; 二思路汇总&#xff1a; 想到这道题&#xff0c;可能看起来第一思路就是把它们…

【C++二分查找】2563. 统计公平数对的数目

本文涉及的基础知识点 C二分查找 LeetCode2563. 统计公平数对的数目 给你一个下标从 0 开始、长度为 n 的整数数组 nums &#xff0c;和两个整数 lower 和 upper &#xff0c;返回 公平数对的数目 。 如果 (i, j) 数对满足以下情况&#xff0c;则认为它是一个 公平数对 &…

利用住宅代理优化媒体监控,全面提升品牌管理与市场竞争力

引言 什么是媒体监控&#xff1f;主要用于哪里&#xff1f; 媒体监控面临的主要挑战 住宅代理在媒体监控中的作用 如何利用住宅代理进行媒体监控 总结 引言 在信息化时代&#xff0c;媒体监控&#xff08;media monitoring&#xff09;已成为企业进行品牌声誉管理、市场研…

喵喵蓝牙热敏打印机(下)

目录 前言一、电量、温度、缺纸检测1.电量检测2.针头温度检测3.缺纸检测 二、蓝牙APP通信打印1.蓝牙初始化2.APP通信打印 三、FreeRTOS任务整合 前言 喵喵蓝牙热敏打印机&#xff08;上&#xff09; 内容有点多&#xff0c;就分为了上下两篇。 一、电量、温度、缺纸检测 先启…

Codigger视频会议(Meeting):科技行业软件开发团队的协作革新

在数字化时代&#xff0c;软件开发团队的协作方式正在经历一场革命。远程工作已成为新常态&#xff0c;而Codigger视频会议&#xff08;Meeting&#xff09;作为这场变革的催化剂&#xff0c;正在帮助科技行业的团队突破地理限制&#xff0c;实现无缝协作。 随着科技行业的快速…

Adobe Audition AU 2023-23.6.6.1 解锁版下载和安装教程(专业的音频处理工具)

前言 Audition是Adobe旗下一款非常好用的音频处理工具&#xff0c;软件为用户们提供了功能强大的音频编辑功能和一个相对完善的工作流程&#xff0c;用户们无论是录制音乐、无线电广播还是视频配音&#xff0c;多音频合成&#xff0c;这款软件都能够给你足够的创作动力。audit…

MR400D工业级带网口4G DTU:RS232/RS485 TO LTE深度测评

在物联网技术日新月异的今天&#xff0c;数据传输的效率和稳定性成为了各行各业关注的焦点。作为一款集先进性与实用性于一身的物联网设备&#xff0c;工业级带网口的4G DTU&#xff08;数据传输单元&#xff09;以其强大的功能特性和广泛的应用场景&#xff0c;赢得了市场的广…

整合nacos遇到的小问题

1.nacos创建配置中心文件时&#xff0c;创建不了&#xff0c;原因是新版本nacos数据表有字段加了安全校验 2.bootStrap.yaml文件创建时。需注意文件名称和后缀

simulink种deadzone死区模块的理解和使用,使用simulink开发pid的时候经常添加deadzone(重要)

Dead Zone模块产生指定范围&#xff08;称为截止区&#xff09;内的零输出。输入输出的关系如下&#xff1a; 1、输入落入截止区&#xff0c;输出0 2、输入大于上限值&#xff0c;输出上限值 3、输入小于等于下限值&#xff0c;输出下限值 使用simulink开发pid的时候经常添…

人工智能在子宫内膜癌领域的研究进展|顶刊速递·24-08-12

小罗碎碎念 本期推文主题&#xff1a;人工智能在子宫内膜癌领域中的研究进展 昨天的推文主要介绍的是卵巢癌&#xff0c;有一小部分涉及到了子宫内膜癌&#xff0c;按照最新的规划&#xff0c;今天的推文是与子宫内膜癌相关的。 从事妇科肿瘤研究的老师/同学&#xff0c;可以好…

探索数字媒体产业园区的未来之路

随着科技的飞速发展和数字经济的崛起&#xff0c;数字媒体产业园区正迎来前所未有的机遇和挑战。未来&#xff0c;数字媒体产业园区的发展将主要体现在以下几个方面&#xff1a; 1. 技术驱动的创新 数字媒体产业园区将继续受到前沿技术的推动。人工智能、大数据、虚拟现实和增…

中小企业文档管理最佳方案:7个热门工具

本文将分享7大优质中小企业文档管理工具&#xff1a;PingCode&#xff1b;2. Worktile&#xff1b;3. 飞书文档&#xff1b;4. 语雀&#xff1b;5. 有道云笔记&#xff1b;6. 石墨文档&#xff1b;7. DocuWare。 在管理中小企业时&#xff0c;文档混乱和信息难以追踪是一个常见…

熬汤煮酱锅 全自动可倾式夹层锅的优势:

1. 省时省能 夹层锅的底部加装了隔热层&#xff0c;加热速度更快&#xff0c;热源均匀&#xff0c;可以让食物快速煮熟&#xff0c;大大缩短烹饪时间。同时&#xff0c;其隔热层还可以使锅底局部温度升高&#xff0c;达到减少热量损失、减少能源浪费的效果。 2. 防烫手 夹层锅…