Element Plus 的el-menu sample

 一个el-menu的Sample,正常运行

     <el-menu router unique-opened :collapse="isCollapse">
        
       <div class="book-navbar-left">
          <span><IconSvg c name="logo_200" width="35px" height="35px" style="margin-left:10px;margin-right: 1px;"/></span>
          <h1>System</h1>
        </div>
       
        <el-sub-menu class="book-navbar-menutree" index="1">
          <template #title>
          <el-icon><IconSvg class="IconSvg"  name="icon-sales" width="18px" height="18px" /></el-icon>
            <span>SaAAAA</span>
          </template>
          <el-menu-item index="/customerMaster">
            <el-icon><IconSvg class="IconSvg"  name="icon-customer-master" width="18px" height="18px" /></el-icon>
            <span>CustBBBB</span>
          </el-menu-item>
        </el-sub-menu>

        &
<think>好的,我现在需要帮助用户了解如何在Element Plus中实现el-menu组件的折叠功能。首先,我应该回忆一下Element Plus的文档和相关组件。记得el-menu有一个collapse属性,可以控制菜单的折叠状态。用户可能希望知道如何通过这个属性来切换折叠,并且可能需要动态绑定的例子。 用户的问题中提到了折叠功能的实现方式和示例,所以应该先介绍collapse属性的基本用法。然后,可能需要一个代码示例,展示如何通过按钮切换collapse的值。同时,用户可能遇到动态渲染菜单的情况,尤其是在循环渲染菜单项时如何处理有子菜单和没有子菜单的情况,以及v-for和v-if在同一个元素上的冲突问题。 根据之前的引用内容,特别是引用[4],用户提到在动态渲染el-menu时,使用div包裹导致折叠后文字不隐藏,换成template解决了问题。这说明在循环渲染时,正确的结构很重要。应该提醒用户避免在el-menu内部使用不必要的包裹元素,而是使用template来处理循环。 另外,可能需要提到菜单图标的问题,引用[1]中提到避免在el-sub-menu中使用span添加图标,应该使用Element Plus提供的icon属性或者插槽。所以在示例代码中,应该展示如何正确添加图标,比如使用el-icon组件。 然后,考虑如何动态绑定路由,可能需要结合vue-router,如引用[3]中提到的,所以在示例中展示index属性绑定路由路径,同时处理折叠时的菜单项样式,比如隐藏文字,只显示图标。 最后,总结实现步骤:使用collapse属性,动态切换,正确处理菜单项结构,图标的使用,以及路由配置。同时,附上相关问题,帮助用户进一步学习可能遇到的优化或问题。</think>### Element Plus el-menu 折叠功能实现方式 #### 1. 核心属性说明 Element Plus 的 `el-menu` 组件通过 `collapse` 属性控制折叠状态,该属性接受布尔值: ```html <el-menu :collapse="isCollapse"></el-menu> ``` #### 2. 基础实现示例 ```vue <template> <div> <el-button @click="toggleCollapse">{{ isCollapse ? '展开' : '折叠' }}</el-button> <el-menu :collapse="isCollapse" router background-color="#304156" text-color="#bfcbd9" > <el-sub-menu index="1"> <template #title> <el-icon><document /></el-icon> <span>导航一</span> </template> <el-menu-item index="/page1">页面一</el-menu-item> <el-menu-item index="/page2">页面二</el-menu-item> </el-sub-menu> <el-menu-item index="/dashboard"> <el-icon><setting /></el-icon> <template #title>控制台</template> </el-menu-item> </el-menu> </div> </template> <script setup> import { ref } from 'vue' import { Document, Setting } from '@element-plus/icons-vue' const isCollapse = ref(false) const toggleCollapse = () => { isCollapse.value = !isCollapse.value } </script> ``` #### 3. 动态渲染注意事项 - **循环结构处理**:使用 `<template>` 包裹循环项,避免在 `el-menu` 内直接使用 `<div>` 导致布局异常[^4] - **条件渲染**:通过 `v-if` 判断是否包含子菜单,与 `v-for` 分开使用 ```vue <el-menu :collapse="isCollapse"> <template v-for="item in menuData"> <el-sub-menu v-if="item.children" :key="item.id" :index="item.path"> <template #title> <el-icon><component :is="item.icon" /></el-icon> <span>{{ item.title }}</span> </template> <el-menu-item v-for="child in item.children" :key="child.id" :index="child.path" > {{ child.title }} </el-menu-item> </el-sub-menu> <el-menu-item v-else :key="item.id" :index="item.path"> <el-icon><component :is="item.icon" /></el-icon> <template #title>{{ item.title }}</template> </el-menu-item> </template> </el-menu> ``` #### 4. 样式优化要点 - 设置 `collapse-transition` 属性启用折叠动画 - 添加自定义样式处理折叠状态下的文字隐藏: ```css .el-menu--collapse .el-sub-menu__title span { visibility: hidden; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值