el-submenu折叠失效,文字和>显示

本文探讨了在使用Element-UI框架时遇到的子菜单文字和展开图标在折叠状态下无法隐藏的问题。通过分析发现,错误地在`<el-menu>`标签内使用了`<div>`标签而非推荐的`<el-menu-item>`、`<el-submenu>`等组件,导致折叠效果失效。解决方案是通过CSS样式设置,将`.el-menu--collapse .el-submenu__title span`和`.el-menu--collapse .el-submenu__title .el-submenu__icon-arrow`的显示属性设为none,从而实现折叠时隐藏文字和展开图标。

el-submenu折叠 文字和>显示

问题
在这里插入图片描述

注意<style>标签中不要加scope,否则导致>还是无法隐藏
/*由于 element-ui 的<el-menu>标签本身希望里面嵌套的是<el-menu-item>,<el-submenu>,<el-menu-item-group>之一,但是却嵌套了<div>,而导致收折就隐藏不了文字*/
/*隐藏文字*/
.el-menu--collapse .el-submenu__title span {
  display: none;
}
/*隐藏 > */
.el-menu--collapse .el-submenu__title .el-submenu__icon-arrow {
  display: none;
}

在这里插入图片描述

// 展示组件页面 <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="['', '']" router> <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="/adminBulletin">公告管理</el-menu-item> <el-menu-item index="/adminFeedback">反馈信息</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="/adminUser">用户信息</el-menu-item> <el-menu-item index="/adminCoach">教练信息</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="/adminCourse">课程信息</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="/adminEquipment">器材管理</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="5"> <template slot="title"><i class="el-icon-menu"></i>预约日志</template> <el-menu-item-group> <el-menu-item index="/adminCourseAppointment" >课程预约</el-menu-item > <el-menu-item index="/adminCoachAppointment">教练预约</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="6"> <template slot="title"><i class="el-icon-menu"></i>个人中心</template> <el-menu-item-group> <el-menu-item index="/updateAdmin">个人信息</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-menu> </el-dropdown> </el-header> <el-main> <router-view></router-view> </el-main> </el-container> </el-container> </template> <script> export default { data() { return {}; }, methods: {}, }; </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> 点击注销回到登陆页面
09-20
你已经有一个完整的左侧菜单导航的后台管理布局,现在需要实现: > **点击“注销”按钮后,退出登录并跳转到登录页(如 `/login`)** --- ### ✅ 实现目标 - 点击右上角「设置」→「注销」 - 清除用户登录状态(如:清除 token) - 跳转到登录页面 `/login` - 防止返回时还能访问管理员页面(需配合路由守卫) --- ## ✅ 修改后的完整代码(含“注销”功能) ```vue <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="['', '']" router> <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="/adminBulletin">公告管理</el-menu-item> <el-menu-item index="/adminFeedback">反馈信息</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="/adminUser">用户信息</el-menu-item> <el-menu-item index="/adminCoach">教练信息</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="/adminCourse">课程信息</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="/adminEquipment">器材管理</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="5"> <template slot="title"> <i class="el-icon-menu"></i>预约日志 </template> <el-menu-item-group> <el-menu-item index="/adminCourseAppointment">课程预约</el-menu-item> <el-menu-item index="/adminCoachAppointment">教练预约</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="6"> <template slot="title"> <i class="el-icon-menu"></i>个人中心 </template> <el-menu-item-group> <el-menu-item index="/updateAdmin">个人信息</el-menu-item> </el-menu-item-group> </el-submenu> </el-menu> </el-aside> <el-container> <el-header style="text-align: right; font-size: 12px; display: flex; align-items: center; justify-content: flex-end"> <el-dropdown @command="handleCommand"> <i class="el-icon-setting" style="margin-right: 15px; cursor: pointer">设置</i> <el-dropdown-menu slot="dropdown"> <el-dropdown-item command="logout">注销</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 { name: 'AdminLayout', methods: { // 处理下拉菜单命令 handleCommand(command) { if (command === 'logout') { // 1. 清除 token(假设你使用 localStorage 存储) localStorage.removeItem('token'); // 或 'adminToken' localStorage.removeItem('userInfo'); // 2. 可选:提示用户 this.$message({ type: 'success', message: '已成功注销!', duration: 1500 }); // 3. 跳转到登录页 this.$router.push('/login'); } } } }; </script> <style> .el-header { background-color: #b3c0d1; color: #333; line-height: 60px; padding: 0 20px; } .el-aside { color: #333; } html, body, #app, .el-container { padding: 0; margin: 0; height: 100vh; } .el-aside { height: 100%; background-color: #f4f5f7; } </style> ``` --- ## ✅ 关键点说明 | 功能 | 实现方式 | |------|----------| | **绑定点击事件** | 使用 `@command` `command="logout"` 触发逻辑 | | **清除登录状态** | `localStorage.removeItem('token')` | | **跳转登录页** | `this.$router.push('/login')` | | **用户体验优化** | 添加 `$message` 提示 | --- ## 🔐 建议补充:路由守卫(防止未登录访问) 在 `router/index.js` 中添加守卫,确保未登录不能访问 `/admin*` 页面。 ```js // router/index.js router.beforeEach((to, from, next) => { const requiresAuth = to.matched.some(record => record.meta.requiresAuth); const token = localStorage.getItem('token'); if (requiresAuth && !token) { next('/login'); } else { next(); } }); ``` 然后给所有管理员页面的路由加上 `meta: { requiresAuth: true }`: ```js { path: '/adminChart', component: AdminChart, meta: { requiresAuth: true } } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值