elementplus菜单组件的那些事

在使用 elementplus 的菜单组件时,我发现有很多东西是官方没有提到但是需要注意的点

  1. 菜单组件右侧会有一个边框

设置css

css 复制代码
.el-menu {
  border: 0 !important;
}
  1. 使用其他的 icon

文字内容一定要写在 这个名字为 title 的插槽中

html 复制代码
<el-menu-item
      
        v-for="item in navList"
        :key="item"
        :index="
         item.path
        "
      >
        <span
          style="margin-right: 20px; font-weight: bold"
          :class="item.icon"
        ></span>//这个地方我使用的是 阿里巴巴图标库里面的图表
        <template #title>
         {{ item.text }}//文字要在这里面
        </template>
      </el-menu-item>
  1. 刷新不能回到对应的 活动样式失效

我这边使用的是 :class 加 设置 :default-active

先是在 el-menu-item 中指定了 选中时的样式

html 复制代码
<el-menu-item
      :class="{subActive:getCurrentPath()==item.path}"//这行代码待会会解释
        v-for="item in navList"
        :key="item"
        :index="
          item.path
        "
      >
        <span
          style="margin-right: 20px; font-weight: bold"
          :class="item.icon"
        ></span>
        <template #title>
         {{ item.text }}
        </template>
      </el-menu-item>

通过 getCurrentPath 这个函数获取到 当前的路径 ,并且 判断是否和当前的路径符合,来控制样式是否显示。

我这边的 getCurrentPath 这个函数里面 是因为 前面前缀是一样的,我只需要判断后面是否相等就行,之所以会这样写 是因为很多时候 我们左侧的路由 因为右边的内容页,再细分,但是呢,它是同属于一个大的路由的,它们会有一个公共的前缀部分,只需要保证公共前缀部分相等就行

javascript 复制代码
const getCurrentPath = () => {
  let currentPath = route.path.split("/");

  // console.log(currentPath);

  for (let i = 0; i < navList.length; i++) {
    let path = navList[i].path.split("/");

    if (flag === 0) {
      if (path[2] == currentPath[2]) {
        return navList[i].path;
      }
    }
    else{
      if (path[1] === currentPath[3]) {
        
        return navList[i].path;
      }
    }
  }
};

一般情况应该是这样,插一嘴,route 指的是 这个

javascript 复制代码
import { useRoute } from "vue-router";

const route = useRoute();
javascript 复制代码
const getCurrentPath = () => {
  
  for (let i = 0; i < navList.length; i++) {
    if(navList[i].path===route.path) return navlist[i].path
    //其实就是判断 菜单的路由是否对的上当前路径
  }
};

然后 在 el-menu 中 需要设置 router 模式,也就是需要加上这个,设置默认路由 是 getCurrentPath()就好(一定需要匹配的上 :index 里面的内容)

javascript 复制代码
<el-menu
      class="el-menu-vertical-demo"
      :collapse="isCollapse"
      router
      :default-active="getCurrentPath()"
    >

</el-menu>
  1. 修改高度等

element-plus 中很多样式都是设置了一个固定的值来设定css的一些参数,当我们需要修改这些的时候,我们发现使用 css 覆盖的效果微乎其微,其实我们可以自己修改这些值

很多都可以去检查里面找到,然后进行修改

css 复制代码
:root {
  --el-menu-item-height: 80px;//这个是每个子菜单高度
  --el-menu-base-level-padding: 40px;//padding值
  --el-text-color-primary: #8a8989;//文字颜色
}
相关推荐
kyriewen34 分钟前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒1 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫1 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus2 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬3 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao3 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端
Highcharts.js4 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化
Dream-Y.ocean4 小时前
鸿蒙PC平台星图遥感适配实战:基于 Electron 壳方案的纯 JavaScript 遥感图像处理引擎开发
javascript·electron·harmonyos
螺丝钉tina4 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript
小天源5 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库