Skip to content

Menu 菜单

为用户提供导航菜单,支持垂直和水平两种模式。

基础用法

垂直菜单,通过 default-active 设置默认激活的菜单项。

基础用法

水平菜单

设置 mode="horizontal" 创建水平导航菜单。

水平菜单

折叠菜单

通过 collapse 属性可以切换菜单的折叠状态。

折叠菜单

弹出层定制

通过 popper-effect 设置弹出层主题,popper-offset 调整偏移量。

弹出层定制

数据驱动

通过 options 属性可以根据数组数据直接生成菜单。

数据驱动

外部控制

通过 ref 调用组件暴露的方法来手动控制菜单状态。

外部控制

菜单分组

使用 yh-menu-item-group 对菜单项进行分组。

菜单分组

禁用菜单

通过 disabled 属性禁用菜单项或子菜单。

禁用菜单

自定义颜色

通过 background-colortext-coloractive-text-color 自定义菜单颜色。

自定义颜色

Inverted 样式

通过 inverted 属性可以快速开启深色反转主题。

Inverted 样式

菜单内容很长

当菜单项或子菜单的文字内容过长时,会自动显示省略号并适应布局。

菜单内容很长

手风琴

通过 unique-opened 属性可以使菜单每次只展开一个子菜单。

手风琴

展开选中的组

使用 default-openeds 可以预置需要初始展开的子菜单标识数组。

展开选中的组

自定义节点

通过 render-label 等渲染函数或插槽,可以批量深度定制菜单节点的显示内容。

自定义节点

在 Nuxt 中使用

Menu 组件支持 router 属性,可以配合 Nuxt 的路由系统使用。

提示:设置 router 属性后,菜单将根据当前路由路径与 index 进行自动匹配激活。

Nuxt 中使用

SSR 注意事项

  • ✅ 完美支持服务端渲染 (SSR),无水合错误
  • ✅ 支持 vue-router 集成
  • ✅ 支持折叠动画
  • ✅ 完整的键盘导航支持

API

属性说明类型默认值
mode菜单模式'vertical' | 'horizontal''vertical'
default-active当前激活菜单的 indexstring''
default-openeds当前打开的 sub-menu 的 index 数组string[][]
expand-all是否展开全部菜单booleanfalse
unique-opened是否只保持一个子菜单展开booleanfalse
menu-trigger子菜单打开触发方式 (Popup 模式有效)'hover' | 'click''hover'
collapse是否开启折叠模式(仅 vertical 模式)booleanfalse
collapse-transition折叠动画是否开启booleantrue
router是否启用 vue-router 模式booleanfalse
root-indent菜单第一级的缩进,缺省时使用 indentnumber
render-extra批量处理菜单额外部分渲染 (VNode)Function
render-icon批量处理菜单图标渲染 (VNode)Function
render-label批量处理菜单标签渲染 (VNode)Function
responsive是否自动收起溢出的菜单 (水平模式)booleanfalse
value菜单当前的选中值 (支持 v-model)string | null
options菜单配置项,支持从数据驱动生成菜单MenuItemData[][]
background-color背景色string''
text-color文字颜色string''
active-text-color激活项文字颜色string''
ellipsis是否开启省略模式(水平模式下)booleantrue
popper-z-index子菜单弹出层层级number2000
teleported是否将弹出菜单挂载至 bodybooleantrue
gap菜单项间距number4
icon-size菜单未折叠时图标的大小number20
indent菜单每级的缩进number32
inverted是否使用反转样式 (深色背景)booleanfalse
key-field数据源中 key 的字段名string'key'
label-field数据源中 label 的字段名string'label'
ellipsis-icon自定义省略图标 (水平模式)string | Component
popper-offset弹出层的偏移量number6
popper-effectTooltip 主题'dark' | 'light''light'
close-on-click-outside单击外部时是否折叠菜单booleantrue
popper-class弹出菜单的自定义类名string''
popper-style弹出菜单的自定义样式string | object''
show-timeout菜单出现前的延迟number300
hide-timeout菜单消失前的延迟number300
persistent隐藏时是否保留子菜单 DOMbooleantrue
属性说明类型默认值
index唯一标识string— (必填)
label显示文本string''
routevue-router 路由对象string | object''
disabled是否禁用booleanfalse
属性说明类型默认值
title分组标题string''
属性说明类型默认值
index唯一标识string— (必填)
label显示文本string''
popper-class弹出菜单的自定义类名string''
disabled是否禁用booleanfalse
show-timeout展开收起的延时number300
hide-timeout收起的延时number300
popper-offset弹出层偏移量number6

Events

事件名称说明回调参数
select菜单激活回调(index: string, indexPath: string[], item: MenuItemData | undefined, routeResult?: Promise<void>)
open子菜单展开回调(index: string, indexPath: string[])
close子菜单收起回调(index: string, indexPath: string[])
update:valuevalue 改变时的回调 (支持 v-model)(value: string) => void

Slots

插槽名说明组件
default菜单内容Menu
default菜单项内容MenuItem
title分组标题MenuItemGroup
default分组内容MenuItemGroup
title子菜单标题SubMenu
default子菜单内容SubMenu

Expose

名称说明类型
open展开指定子菜单(index: string) => void
close收起指定子菜单(index: string) => void
activeIndex当前激活项Ref<string>
openedMenus当前展开的子菜单Ref<string[]>

这是用于 options 属性的数据结构:

属性说明类型
key唯一标识 (同 index)string
index唯一标识 (同 key)string
label显示文本string
icon图标名称string
disabled是否禁用boolean
children子菜单数据MenuItemData[]
group是否为分组项boolean

主题变量 (CSS Variables)

所有颜色变量已与全局主题系统对接,自动支持暗黑模式:

变量名默认值描述
--yh-menu-bg-colorvar(--yh-bg-color)菜单背景色
--yh-menu-text-colorvar(--yh-text-color-primary)菜单文字颜色
--yh-menu-active-text-colorvar(--yh-color-primary)激活状态文字颜色
--yh-menu-hover-bg-colorvar(--yh-color-primary-light-9)悬停背景色
--yh-menu-active-bg-colorvar(--yh-color-primary-light-9)激活背景色
--yh-menu-border-colorvar(--yh-border-color-light)菜单边框颜色
--yh-menu-item-height50px菜单项高度
--yh-menu-icon-size18px菜单图标大小
--yh-menu-base-padding20px菜单基础内边距
--yh-menu-indicator-width3px指示条宽度
--yh-menu-indicator-colorvar(--yh-menu-active-text-color)指示条颜色

Inverted 模式

开启 inverted 属性后,菜单会自动切换为深色主题,使用以下覆盖变量:

  • --yh-menu-bg-color: var(--yh-bg-color-overlay-dark)
  • --yh-menu-text-color: var(--yh-text-color-secondary)
  • --yh-menu-hover-bg-color: var(--yh-fill-color-dark)

提示: Menu 组件融合了 Element Plus、Ant Design 和 Naive UI 的优秀设计,支持垂直/水平模式、折叠、分组、vue-router 集成等丰富功能。

Released under the MIT License.