el-menu-item动态路径解决方案

本文介绍了一种在el-plus中批量配置el-menu-item的方法,特别是如何处理带有动态参数的路由路径,通过使用computed属性实现菜单项的动态生成与管理。

场景:要配置批量el-menu-item,其中路径带动态参数:/app/:id/path

el-plus API

 解决方案:

1. computed + index

1. computed + route + click

Tips:computed 是关键

<el-menu ellipsis class="el-menu-popper-demo" mode="horizontal" style="max-width: 1200px" active-text-color="#ffffff" :default-active="activePath" router > <el-menu-item index="index">首页</el-menu-item> <el-menu-item index="2" id="product">产品及解决方案</el-menu-item> <el-sub-menu :popper-offset="0" index="walkInto" @click="handleMenuClick"> <template #title>走进兴龙</template> <el-menu-item index="/walkInto#profile">公司简介</el-menu-item> <el-menu-item index="/walkInto#process">发展历程</el-menu-item> <el-menu-item index="/walkInto#news">新闻资讯</el-menu-item> </el-sub-menu> <el-menu-item index="user">用户服务</el-menu-item> <el-sub-menu :popper-offset="0" index="0"> <template #title>招贤纳士</template> <el-menu-item index="campus">校园招聘</el-menu-item> <el-menu-item index="society">社会招聘</el-menu-item> </el-sub-menu> <el-menu-item index="contact">联系我们</el-menu-item> <el-menu-item index="medium">媒体中心</el-menu-item> </el-menu> <script setup> import { useRouter,useRoute } from 'vue-router' import { ref, watch } from 'vue'; const route = useRoute(); const activePath = ref("index"); const updateBreadcrumbItems = (route) => { activePath.value = route.name; }; // 监听路由变化 watch( () => route.path, () => { updateBreadcrumbItems(route); } ); const router = useRouter() function goIndex() { router.push({name: 'index'}); } const handleMenuClick = () => { router.push('/walkInto'); }; </script> 这段代码点击el-sub-menu虽然跳转到了walkInto页面但是走进兴龙没有进行高亮显示 其中子菜单的 index="/walkInto#profile" 为锚点设置点击跳转到walkInto页面id为profile处的位置这个不要进行更改 要如何点击el-sub-menu跳转到walkInto页面同时走进兴龙也进行高亮显示
03-27
页面// 展示组件页面 <template> <el-container style="height: 100%; border: 1px solid #eee"> <el-aside width="200px" style="background-color: rgb(238, 241, 246)"> <el-menu :default-openeds="['', '']"> <el-submenu index="0"> <template slot="title"> <i class="el-icon-setting"></i>数据管理</template> <el-menu-item-group> <el-menu-item index="/adminChart">数据统计</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="1"> <template slot="title"> <i class="el-icon-setting"></i>公告</template> <el-menu-item-group> <el-menu-item index="1-1">公告管理</el-menu-item> <el-menu-item index="1-2">反馈信息</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="2"> <template slot="title"><i class="el-icon-menu"></i>用户管理</template> <el-menu-item-group> <el-menu-item index="2-1">用户信息</el-menu-item> <el-menu-item index="2-2">教练信息</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="3"> <template slot="title"> <i class="el-icon-setting"></i>课程管理</template > <el-menu-item-group> <el-menu-item index="3-1">课程信息</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="4"> <template slot="title"> <i class="el-icon-setting"></i>训练馆管理</template > <el-menu-item-group> <el-menu-item index="4-1">器材管理</el-menu-item> <el-menu-item index="4-2">场地管理</el-menu-item> </el-menu-item-group> </el-submenu> </el-menu> </el-aside> <el-container> <el-header style="text-align: right; font-size: 12px"> <el-dropdown> <i class="el-icon-setting" style="margin-right: 15px">管理员</i> <el-dropdown-menu slot="dropdown"> <el-dropdown-item>个人中心</el-dropdown-item> <el-dropdown-item>注销</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </el-header> <el-main> <router-view></router-view> </el-main> </el-container> </el-container> </template> <script> export default { data() { return {}; }, }; </script> <style> .el-header { background-color: #b3c0d1; color: #333; line-height: 60px; } .el-aside { color: #333; } html, body, #app, .el-container { /*设置内部填充为0,几个布局元素之间没有间距*/ padding: 0px; /*外部间距也是如此设置*/ margin: 0px; /*统一设置高度为100%*/ height: 100vh; } .el-aside { height: 100%; background-color: #d3dce6; } </style> js: { path: '/admin', name: 'admin', component: AdminView, children: [ { path: '/adminChart', name:'adminChart', component: ChartView } ] }跳不过去
09-10
### 关于 `el-menu` 组件中 `el-menu-item` 跳转时颜色不变的问题 在 Element UI 中,`el-menu` 是一个功能强大的导航菜单组件。当使用 `el-menu-item` 进行页面跳转时,如果发现激活项的颜色未发生变化,通常是因为配置不正确或者缺少必要的属性。 以下是解决方案: #### 1. **确保绑定 `:default-active`** 为了使 `el-menu` 正确识别当前活动的菜单项并应用样式,需要通过 `:default-active` 属性指定默认激活的菜单项索引[^2]。 此属性可以动态绑定到 `$route.path` 或其他变量上,从而实现根据路由路径自动更新激活状态的功能。 ```html <el-menu :default-active="$route.path" background-color="#333744" text-color="#fff" active-text-color="#ffd04b"> </el-menu> ``` #### 2. **启用路由模式 (`:router="true")** 为了让 `el-menu-item` 支持基于 Vue Router 的链接行为,需将 `:router` 设置为 `true`。这样,点击菜单项会触发对应的路由跳转,并且能够正常显示激活状态。 ```html <el-menu :default-active="$route.path" :router="true" background-color="#333744" text-color="#fff" active-text-color="#ffd04b"> <el-menu-item index="/home">首页</el-menu-item> <el-menu-item index="/about">关于我们</el-menu-item> </el-menu> ``` #### 3. **确认 `index` 值唯一性** 每个 `el-menu-item` 和 `el-submenu` 的 `index` 属性值都应具有唯一性。这是因为在内部逻辑中,`el-menu` 使用这些值来判断哪个项目处于激活状态[^3]。如果没有提供唯一的 `index`,可能会导致无法正确定位激活项。 ```html <el-menu :default-active="$route.path" :router="true" background-color="#333744" text-color="#fff" active-text-color="#ffd04b"> <el-menu-item index="unique-index-1">选项一</el-menu-item> <el-menu-item index="unique-index-2">选项二</el-menu-item> </el-menu> ``` #### 4. **自定义 CSS 样式调整** 如果上述方法仍未能解决问题,则可能是由于全局或局部样式的冲突覆盖了默认的激活样式。可以通过检查浏览器开发者工具定位具体原因,并尝试重新定义 `.is-active` 类的相关样式。 ```css /* 自定义激活状态下文字颜色 */ .el-menu .is-active { color: yellowgreen !important; } ``` --- ### 完整示例代码 以下是一个完整的配置案例,展示了如何正确设置 `el-menu` 及其子组件以支持路由跳转和高亮效果。 ```html <template> <div> <el-menu :default-active="$route.path" :router="true" mode="horizontal" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <!-- 主菜单 --> <el-menu-item index="/">主页</el-menu-item> <el-menu-item index="/profile">个人中心</el-menu-item> <!-- 子菜单 --> <el-submenu index="sub1"> <template slot="title">更多选项</template> <el-menu-item index="/settings">设置</el-menu-item> <el-menu-item index="/help">帮助</el-menu-item> </el-submenu> </el-menu> </div> </template> <script> export default { name: 'NavMenu', }; </script> <style scoped> /* 确保激活状态的文字颜色生效 */ .el-menu .is-active { color: #ffd04b !important; } </style> ``` --- ### 总结 要解决 `el-menu-item` 跳转时颜色不变的问题,关键是确保以下几个方面: 1. 合理配置 `:default-active` 并将其绑定至 `$route.path`; 2. 开启 `:router=true` 来支持路由跳转; 3. 提供唯一的 `index` 值给每个菜单项; 4. 如果必要,可通过自定义 CSS 修改激活状态的表现。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值