首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-18 14:01
  • 4191
  • 10476
blog.csdn.net

文章目录

  • 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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

这个递归组件写法其实是正确的,可是在新版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: `
    
      
      
    
    
  `,
  setup(props) {
  },
})
</script>
<style scoped lang="scss">
.catalog {
  height: 60px;
}
</style>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

可以查看开源代码: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 事件,动态调整子菜单的显示状态和位置。
注:本文转载自blog.csdn.net的极客岛的文章"https://whr2349.blog.csdn.net/article/details/141260872"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top