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)指示条颜色

类型导出

名称说明
YhMenuPropsMenu 组件 Props 类型
YhMenuEmitsMenu 组件事件类型
YhMenuSlotsMenu 组件插槽类型
YhMenuExposeMenu 组件 Expose 类型
YhMenuMode菜单模式联合类型
YhMenuTrigger子菜单触发方式联合类型
YhMenuItemData菜单数据类型
YhMenuItemPropsMenuItem 组件 Props 类型
YhMenuItemGroupPropsMenuItemGroup 组件 Props 类型
YhSubMenuPropsSubMenu 组件 Props 类型
YhMenuInstanceMenu 组件实例类型
YhMenuItemInstanceMenuItem 组件实例类型
YhMenuItemGroupInstanceMenuItemGroup 组件实例类型
YhSubMenuInstanceSubMenu 组件实例类型

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.