el-menu动态渲染问题

文章讲述了在ElementUI中,动态渲染菜单列表时遇到的激活样式bug和前后el-submenu状态互相影响的问题。解决方法包括使用`key`属性区分el-menu-item和el-submenu,并指出在Vue2环境下使用ElementUIPlus+Vue3可能存在的未知情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

element ui
对于菜单列表,可以使用el-menu 组件进行渲染,但是当渲染的列表会动态的变化时,会出现一定问题

后渲染的列表激活样式bug

问题:初始渲染的菜单列表点击可以选中,并显示激活状态。但是当列表动态切换后,再次渲染的列表在点击时没有激活样式,最多只显示悬浮样式,想要有激活样式,需要双击。
解决:需要对el-menu-item标签进行区分,可以使用:key="id"等属性对各个el-menu-item标签进行区分,使其重新渲染。

前后渲染的el-submenu互相影响

问题:初始的el-submenu展开时,若切换渲染列表,则渲染后的el-submenu也保持展开时状态。即前后渲染的el-submenu展开与收起会保持一致
解决:此时对el-submenu使用key进行区分并不比作用,需要使用:index="id"对el-submenu进行区分。index是el-submenu的唯一区分标志。

以上测试使用的是Element UI,Vue2环境。Element UI Plus+Vue3是否有同样问题或解决是否同样生效未知

### 使用 `el-menu` 渲染静态路由 为了实现通过 `element-ui` 的 `el-menu` 组件来渲染静态路由,可以将 Vue Router 中定义的路由映射到菜单项中。下面是一个具体的例子说明如何完成这一操作。 #### 定义路由配置 首先,在项目中创建一个包含所有静态路由的对象数组: ```javascript const routes = [ { path: '/home', component: Home, label: 'Home' }, { path: '/about', component: About, label: 'About Us' } ]; ``` 接着初始化 Vue Router 实例并传入这些路由[^1]。 #### 创建导航菜单模板 在 HTML 或单文件组件 (SFC) 中编写如下结构用于显示菜单条目: ```html <template> <div id="app"> <!-- 菜单 --> <el-menu :default-active="$route.path" router mode="horizontal"> <el-menu-item v-for="(item, index) in menuItems" :key="index" :index="item.path">{{ item.label }}</el-menu-item> </el-menu> <!-- 页面内容区域 --> <router-view></router-view> </div> </template> ``` 这段代码利用了 `<el-menu>` 和 `<el-menu-item>` 来构建水平布局的顶部导航栏,并且设置了 `router` 属性使得点击菜单项能够触发相应的页面跳转;同时设置默认激活状态为当前路径 `$route.path`。 #### 数据绑定与逻辑处理 最后一步是在 JavaScript 部分添加数据属性以及任何必要的计算属性或方法来进行数据传递给视图层: ```javascript export default { data() { return { menuItems: this.routes // 将前面定义好的routes赋值给menuItems变量以便于v-for循环遍历 }; }, }; ``` 这样就完成了基于 `element-ui` 的 `el-menu` 组件对静态路由的支持。当访问者浏览网站时,他们可以通过点击不同的菜单选项轻松切换不同页面的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨灰ash2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值