关于element导航菜单使用for循环出来,展开一个菜单项,其余也都打开的问题

在使用Element UI的导航菜单时遇到一个问题,当使用v-for循环渲染菜单项时,点击某一项会导致所有菜单项都展开。原因在于菜单项的index相同导致。解决办法是在循环中为每个菜单项设置唯一的index,通常是用ID拼接空字符串转换成字符串。这样每个菜单项就有了自己的唯一标识,避免了展开冲突。

问题描述

使用element导航菜单时,使用v-for循环出来的每一项,打卡一个菜单项时发现其他项也都打开了,是因为<el-menu>标签是根据index来定位展开还是关闭的,而使用v-for循环使得每一项的index都是一样的,所以才会一个打开都打开

解决办法

只需要在循环时,给每一项添加唯一index就可以了,每一项都有自己的唯一id,所以将id作为index,加空字符串是因为index只接受字符串,而id是数字,拼接空字符串可以使数字转为字符串。

<el-submenu v-for="(item,index) in resources" :key="index" :index="item.id + '' "></el-submenu>
### 如何在Element UI导航菜单中集成搜索框组件 要在Element UI的导航菜单中添加搜索框功能,可以通过自定义`el-menu`组件来实现。以下是具体方法: #### 方法概述 通过组合 `el-input` 和 `el-menu` 组件,在导航栏顶部嵌入一个输入框用于过滤菜单项。可以监听输入事件并动态更新显示的菜单列表。 --- #### 实现代码示例 以下是一个完整的示例代码片段,展示如何将搜索框与导航菜单结合在一起[^1]: ```html <template> <div class="menu-container"> <!-- 搜索框 --> <el-input v-model="searchText" placeholder="请输入关键字..." prefix-icon="el-icon-search" @input="filterMenuItems"></el-input> <!-- 导航菜单 --> <el-menu :default-active="activeIndex" mode="horizontal"> <template v-for="(item, index) in filteredMenus"> <el-menu-item :key="index" :index="String(index)"> {{ item.label }} </el-menu-item> </template> </el-menu> </div> </template> <script> export default { data() { return { searchText: '', // 输入框绑定的数据模型 activeIndex: '0', menus: [ { label: '首页' }, { label: '产品中心' }, { label: '关于我们' }, { label: '联系我们' } ], filteredMenus: [] // 过滤后的菜单数据 }; }, created() { this.filteredMenus = [...this.menus]; // 初始化未过滤的菜单 }, methods: { filterMenuItems() { const keyword = this.searchText.trim().toLowerCase(); if (!keyword) { this.filteredMenus = [...this.menus]; } else { this.filteredMenus = this.menus.filter(item => item.label.toLowerCase().includes(keyword) ); } } } }; </script> <style scoped> .menu-container .el-input { margin-bottom: 10px; } </style> ``` --- #### 关键点解析 1. **双向绑定** 使用 `v-model` 将输入框的内容绑定到变量 `searchText` 上,并实时获取用户输入的关键字[^3]。 2. **动态过滤逻辑** 定义了一个名为 `filteredMenus` 的数组,用来存储经过筛选后的菜单项。当用户输入内容发生变化时,调用 `filterMenuItems()` 函数重新计算符合条件的菜单条目。 3. **模板渲染优化** 利用了 Vue 的条件渲染特性 (`v-if`) 或者循环遍历机制 (`v-for`) 来控制最终呈现给用户的界面效果[^2]。 4. **样式调整** 可以为搜索框设置额外的空间间隔(如上边距),使其更贴近实际需求中的布局设计。 --- #### 注意事项 如果项目规模较大或者需要支持更多复杂交互行为,则建议考虑封装成独立组件以便于维护和复用;另外还需注意性能问题——尤其是在面对海量级子节点的情况下应采取懒加载策略减少初始 DOM 渲染开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值