Element Plus 提供了三种主要的菜单组件:ElMenu、ElDropdown 和 ElSelect。以下是它们的区别和最佳实践:
<template>
<!-- 侧边栏导航 -->
<el-menu
:default-active="activeIndex"
class="el-menu-vertical-demo"
@select="handleSelect"
>
<el-menu-item index="1">
<el-icon><House /></el-icon>
<span>首页</span>
</el-menu-item>
<el-sub-menu index="2">
<template #title>
<el-icon><Setting /></el-icon>
<span>系统管理</span>
</template>
<el-menu-item index="2-1">用户管理</el-menu-item>
<el-menu-item index="2-2">角色管理</el-menu-item>
</el-sub-menu>
</el-menu>
</template>
<template>
<!-- 用户操作下拉菜单 -->
<el-dropdown @command="handleCommand">
<span class="el-dropdown-link">
用户操作<el-icon class="el-icon--right"><arrow-down /></el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="profile">
<el-icon><User /></el-icon>个人资料
</el-dropdown-item>
<el-dropdown-item command="settings">
<el-icon><Setting /></el-icon>设置
</el-dropdown-item>
<el-dropdown-item divided command="logout">
<el-icon><SwitchButton /></el-icon>退出登录
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
<template>
<!-- 表单选择器 -->
<el-select
v-model="value"
placeholder="请选择"
clearable
filterable
@change="handleChange"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
<!-- 分组 -->
<el-option-group label="热门城市">
<el-option value="Shanghai" label="上海" />
<el-option value="Beijing" label="北京" />
</el-option-group>
</el-select>
</template>
| 特性 | ElMenu | ElDropdown | ElSelect |
|---|---|---|---|
| 主要用途 | 导航 | 操作菜单 | 表单选择 |
| 触发方式 | 点击菜单项 | 点击/悬停触发元素 | 点击输入框 |
| 多级支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 搜索过滤 | ❌ 不支持 | ❌ 不支持 | ✅ 支持 |
| 表单绑定 | ❌ 不支持 | ❌ 不支持 | ✅ 支持 |
| 路由集成 | ✅ 支持 | 需要手动处理 | ❌ 不支持 |
| 位置控制 | 固定位置 | 灵活定位 | 下拉定位 |
ElMenu 做主导航ElDropdown 做操作菜单ElSelect 做表单选择<!-- 大数据使用虚拟滚动 -->
<el-select
v-model="value"
filterable
:filter-method="filterMethod"
:loading="loading"
remote
:remote-method="remoteMethod"
>
</el-select>
<!-- ElMenu 与路由结合 -->
<el-menu
:default-active="$route.path"
router
:collapse="isCollapse"
>
<el-menu-item index="/dashboard">
<template #title>仪表板</template>
</el-menu-item>
</el-menu>
<template>
<!-- 在小屏幕上使用下拉菜单代替水平菜单 -->
<div class="nav-container">
<el-menu
v-if="!isMobile"
mode="horizontal"
>
<!-- 桌面端菜单 -->
</el-menu>
<el-dropdown v-else>
<!-- 移动端汉堡菜单 -->
<el-icon><Menu /></el-icon>
<template #dropdown>
<!-- 移动端菜单项 -->
</template>
</el-dropdown>
</div>
</template>
ElDropdown 添加键盘导航支持aria-* 属性增强可访问性<template>
<!-- 导航栏 + 用户下拉菜单 -->
<div class="header">
<!-- 主导航 -->
<el-menu mode="horizontal">
<el-menu-item index="1">首页</el-menu-item>
</el-menu>
<!-- 用户菜单 -->
<el-dropdown>
<div class="user-avatar">
<el-avatar :size="32" :src="user.avatar" />
<span>{{ user.name }}</span>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>个人中心</el-dropdown-item>
<el-dropdown-item divided>退出登录</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<!-- 语言选择 -->
<el-select v-model="language" size="small">
<el-option label="中文" value="zh" />
<el-option label="English" value="en" />
</el-select>
</div>
</template>
选择正确的菜单组件可以提升用户体验和界面一致性。根据具体需求选择合适的组件,并遵循最佳实践来实现功能。