修改a-menu菜单图标icon

这里是引用

1.通过触摸元素可知

这个箭头icon其实是通过::before和::after伪元素组合写出来的

这里是引用

2.模仿使用伪元素书写

同理,我们也使用伪元素写icon即可

  ::v-deep .ant-menu{
  
    // 折叠
    .ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow::after{
      width: 10px;
      height: 1.5px;
      background-color: #8a8a8a!important;
      background-image:none;
      transform: rotate(0deg) translateX(0px);
    }
    .ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow::before{
      width: 10px;
      height: 1.5px;
      background-color: #8a8a8a!important;
      background-image:none;
      transform: rotate(90deg) translateY(0px);
    }
    // 展开
    .ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow::after{
      width: 10px;
      height: 1.5px;
      background-color: #8a8a8a!important;
      background-image:none;
      transform: rotate(0deg) translateY(0px);
    }
    .ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow::before{
      display: none;
    }

  }
### 解决 `el-menu` 在 Router 模式下的图标高亮 为了实现当点击二级菜单时,一级菜单及其图标保持高亮的效果,可以采用如下方法: #### 方法概述 通过监听路由变化来更新当前激活的一级菜单项,并利用 Vue 的响应特性自动调整样式。具体来说,可以通过 Vuex 或者本地状态管理机制保存选中的菜单信息。 #### 实现细节 ##### 组件结构设计 定义一个公共侧边栏组件 `CommonAside.vue` 来承载整个导航逻辑[^2]。 ```vue <template> <el-menu :default-active="activePath" @open="handleOpen" @close="handleClose"> <!-- 动态渲染菜单 --> <sidebar-item v-for="(item, index) in menuList" :key="index" :menu-info="item"></sidebar-item> </el-menu> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ data() { return { activePath: '' }; }, computed: { // 获取菜单列表 menuList(): any[] { return this.$store.state.menu; } }, methods: { handleOpen(key: string | number, keyPath: Array<string | number>): void {}, handleClose(key: string | number, keyPath: Array<string | number>): void {} }, watch: { $route(toRoute): void { const path = toRoute.path.replace('/', ''); this.activePath = path; // 更新默认激活路径 } } }); </script> ``` ##### 处理菜单点击事件 每当用户点击某个菜单项时,不仅跳转到对应页面,还要通知 Vuex 更改全局的状态变量 `currentMenu`,以便后续用于判断哪个是一级菜单应该被点亮。 ```javascript // CommonAside.vue 中的方法 clickMenu(item){ this.$router.push({name:item.name}) this.$store.commit('selectMenu', item); // 记录下当前选中的菜单 } ``` ##### 自定义计算属性控制高亮显示 为了让一级菜单能够根据子菜单的选择而改变自身的高亮状态,可以在模板里加入额外的条件判断语句[^1]。 ```html <!-- SidebarItem.vue --> <li class="submenu-title" :class="{ 'is-active': isActive(menuInfo)}" > {{ menuInfo.meta.title }} <i :class="[menuInfo.meta.icon]" /> </li> ``` ```typescript computed: { ...mapState(['currentMenu']), isActive(){ return function (menuItem) { let flag = false; if(this.currentMenu && menuItem.children){ menuItem.children.forEach(child => { if(child.name === this.currentMenu.name || child.path===this.$route.fullPath){ flag=true; } }); } return flag; } } }, ``` 以上代码片段展示了如何基于当前路由以及存储于 Vuex store 中的数据来进行匹配,从而决定哪些元素应当处于活动状态并应用相应的 CSS 类名以达到视觉上的突出效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值