Element Plus 菜单组件区别和用法最佳实践

 更新时间:2026年01月06日 09:23:53   作者:HWL5679  
本文介绍了ElementPlus中的菜单组件,包括el-menu、el-menu-item、el-sub-menu和el-menu-item-group的特性、用法以及最佳实践,通过对比不同场景的使用指南,帮助开发者根据需求选择合适的组件组合,构建功能强大且用户友好的菜单系统,感兴趣的朋友跟随小编一起看看吧

组件层级关系

el-menu (容器)
├── el-menu-item (直接可点击的选项)
├── el-sub-menu (可展开的父菜单)
│    ├── el-menu-item-group (分组容器,可选)
│    │   ├── el-menu-item (分组内的选项)
│    │   └── el-menu-item (分组内的选项)
│    ├── el-menu-item (未分组的选项)
│    └── el-sub-menu (嵌套子菜单,可无限级)
└── el-menu-item (其他选项)

1. el-menu - 菜单容器

特性:

  • 根容器:所有菜单组件的父容器
  • 控制整体行为:模式(垂直/水平)、主题、激活状态等
  • 管理状态:维护当前激活的菜单项

基础用法:

<template>
  <el-menu
    :default-active="activeIndex"
    class="el-menu-demo"
    mode="horizontal"
    @select="handleSelect"
  >
    <!-- 其他菜单组件 -->
  </el-menu>
</template>

常用属性:

<el-menu
  mode="horizontal|vertical"      <!-- 模式:水平/垂直 -->
  :default-active="currentIndex" <!-- 默认激活项 -->
  :unique-opened="true"          <!-- 是否只保持一个子菜单展开 -->
  :collapse="isCollapse"         <!-- 是否水平折叠收起菜单 -->
  background-color="#545c64"     <!-- 背景色 -->
  text-color="#fff"              <!-- 文字颜色 -->
  active-text-color="#ffd04b"    <!-- 激活文字颜色 -->
>

2. el-menu-item - 菜单项

特性:

  • 叶子节点:通常是最后一级,可点击执行操作
  • 可激活状态:支持选中高亮
  • 支持图标和文本

用法:

<template>
  <el-menu-item index="1" @click="handleClick">
    <el-icon><House /></el-icon>
    <span>首页</span>
  </el-menu-item>
  <!-- 带路由 -->
  <el-menu-item index="2" :route="{ path: '/about' }">
    <template #title>
      <span>关于我们</span>
    </template>
  </el-menu-item>
  <!-- 禁用状态 -->
  <el-menu-item index="3" disabled>
    <span>禁用项</span>
  </el-menu-item>
</template>

关键点:

  • index 属性必须唯一,用于标识和激活状态
  • 通常绑定点击事件或路由跳转
  • 不能包含子菜单组件

3. el-sub-menu - 可展开的子菜单

特性:

  • 父节点:可以包含子项
  • 可折叠:点击展开/收起子内容
  • 可嵌套:支持无限级嵌套

用法:

<template>
  <el-sub-menu index="system">
    <!-- 标题插槽 -->
    <template #title>
      <el-icon><Setting /></el-icon>
      <span>系统管理</span>
    </template>
    <!-- 子内容 -->
    <el-menu-item index="user">用户管理</el-menu-item>
    <el-sub-menu index="log">
      <template #title>日志管理</template>
      <el-menu-item index="login-log">登录日志</el-menu-item>
    </el-sub-menu>
  </el-sub-menu>
</template>

特殊功能:

<!-- 带徽标 -->
<el-sub-menu index="messages">
  <template #title>
    <span>消息中心</span>
    <el-badge :value="3" class="badge" />
  </template>
</el-sub-menu>
<!-- 自定义展开图标 -->
<el-sub-menu index="custom">
  <template #title>
    <span>自定义</span>
  </template>
  <template #icon>
    <el-icon><Star /></el-icon>
  </template>
</el-sub-menu>

4. el-menu-item-group - 菜单项分组

特性:

  • 分组容器:用于对菜单项进行逻辑分组
  • 仅视觉分隔:不影响功能逻辑
  • 显示分组标题

用法:

<template>
  <el-sub-menu index="settings">
    <template #title>设置</template>
    <!-- 分组1 -->
    <el-menu-item-group title="账户设置">
      <el-menu-item index="profile">个人信息</el-menu-item>
      <el-menu-item index="security">安全设置</el-menu-item>
    </el-menu-item-group>
    <!-- 分组2 -->
    <el-menu-item-group title="系统设置">
      <el-menu-item index="theme">主题设置</el-menu-item>
      <el-menu-item index="notification">通知设置</el-menu-item>
    </el-menu-item-group>
    <!-- 未分组的项 -->
    <el-menu-item index="help">帮助中心</el-menu-item>
  </el-sub-menu>
</template>

分组效果:

┌─────────────────┐
│    账户设置     │  ← 分组标题
├─────────────────┤
│  个人信息       │
│  安全设置       │
├─────────────────┤
│    系统设置     │  ← 分组标题
├─────────────────┤
│  主题设置       │
│  通知设置       │
├─────────────────┤
│  帮助中心       │  ← 未分组项
└─────────────────┘

完整示例对比

<template>
  <el-menu default-active="2-2" class="menu-container">
    <!-- 1. 直接菜单项 -->
    <el-menu-item index="1">
      <el-icon><House /></el-icon>
      <span>首页</span>
    </el-menu-item>
    <!-- 2. 带子菜单 -->
    <el-sub-menu index="2">
      <template #title>
        <el-icon><Folder /></el-icon>
        <span>文档中心</span>
      </template>
      <!-- 2.1 未分组的项 -->
      <el-menu-item index="2-1">快速开始</el-menu-item>
      <!-- 2.2 分组1 -->
      <el-menu-item-group title="用户指南">
        <el-menu-item index="2-2">安装指南</el-menu-item>
        <el-menu-item index="2-3">使用教程</el-menu-item>
      </el-menu-item-group>
      <!-- 2.3 分组2 -->
      <el-menu-item-group title="API参考">
        <el-menu-item index="2-4">组件API</el-menu-item>
        <el-menu-item index="2-5">方法参考</el-menu-item>
      </el-menu-item-group>
      <!-- 2.4 嵌套子菜单 -->
      <el-sub-menu index="2-6">
        <template #title>高级主题</template>
        <el-menu-item index="2-6-1">性能优化</el-menu-item>
        <el-menu-item index="2-6-2">最佳实践</el-menu-item>
      </el-sub-menu>
    </el-sub-menu>
    <!-- 3. 另一个直接菜单项 -->
    <el-menu-item index="3">
      <el-icon><InfoFilled /></el-icon>
      <span>关于</span>
    </el-menu-item>
  </el-menu>
</template>

选择指南

场景选择组件说明
直接跳转/操作el-menu-item不需要下级菜单
有子选项el-sub-menu需要展开显示子项
子项需要分类el-menu-item-group + el-menu-item视觉上分组
多级嵌套el-sub-menu 嵌套无限层级
只是容器el-menu最外层容器

最佳实践

  • 保持层级清晰:不建议超过3级嵌套
  • 合理使用分组:当有5个以上子项时考虑分组
  • 索引命名规范:使用层级命名如 1-2-1
  • 响应式考虑:深层次菜单在移动端体验差
  • 配合路由使用
<el-menu
  :default-active="$route.path"
  router
  @select="handleSelect"
>
  <el-menu-item index="/dashboard" :route="{ path: '/dashboard' }">
    仪表盘
  </el-menu-item>
</el-menu>

这些组件共同构成了 Element Plus 强大的菜单系统,可以根据不同需求灵活组合使用。

到此这篇关于Element Plus 菜单组件区别和用法最佳实践的文章就介绍到这了,更多相关Element Plus 菜单组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vuejs响应用户事件(如点击事件)

    vuejs响应用户事件(如点击事件)

    本篇文章主要介绍了vuejs响应用户事件(如点击),通过vuejs响应用户事件的技巧,具有一定的参考价值,有兴趣的小伙伴们可以参考一下。
    2017-03-03
  • vue服务端渲染的实例代码

    vue服务端渲染的实例代码

    本篇文章主要介绍了vue服务端渲染的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Vue如何根据角色获取菜单动态添加路由

    Vue如何根据角色获取菜单动态添加路由

    这篇文章主要介绍了Vue如何根据角色获取菜单动态添加路由,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • vue中给路径起别名的实现方法

    vue中给路径起别名的实现方法

    本文主要介绍了vue中给路径起别名的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • vue2实现pdf电子签章问题记录

    vue2实现pdf电子签章问题记录

    仿照e签宝,实现pdf电子签章 => 拿到pdf链接,移动章的位置,获取章的坐标,怎么实现呢,下面小编给大家介绍vue2实现pdf电子签章问题记录,感兴趣的朋友一起看看吧
    2023-12-12
  • Vue自定义指令实现点击右键弹出菜单示例详解

    Vue自定义指令实现点击右键弹出菜单示例详解

    这篇文章主要为大家介绍了Vue自定义指令实现点击右键弹出菜单示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • vite+vue3中如何使用router

    vite+vue3中如何使用router

    这篇文章主要介绍了vite+vue3中如何使用router问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue2.0实战之使用vue-cli搭建项目(2)

    vue2.0实战之使用vue-cli搭建项目(2)

    这篇文章主要为大家详细介绍了vue2.0实战第二篇使用vue-cli搭建项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • vuex页面刷新导致数据丢失的解决方案

    vuex页面刷新导致数据丢失的解决方案

    这篇文章主要介绍了vuex页面刷新导致数据丢失的解决方案,帮助大家更好的使用vue框架,感兴趣的朋友可以了解下
    2020-12-12
  • Vue2.5通过json文件读取数据的方法

    Vue2.5通过json文件读取数据的方法

    本文通过实例代码给大家详细介绍了Vue2.5通过json文件读取数据的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2018-02-02

最新评论