Skip to content

Menu 导航菜单 ​

基于 Element Plus 的 ElMenu 二次封装,支持普通菜单项、可折叠子菜单及分组三种渲染模式。

菜单节点通过 h() 直接作为 ElMenu 的默认插槽子节点渲染,避免在中间再包一层自定义组件,从而与 Element Plus 内部的注入链一致,子菜单可正常展开。

图标区域使用固定宽度的 .hx-menu__icon-slot 占位(无图标时也会占位),默认宽度为 var(--el-menu-icon-width),与各层级文案左缘对齐。可通过 iconWidth 或根节点 CSS 变量 --hx-menu-icon-slot-width 调整。

基础用法 ​

默认垂直模式,直接传入 menu 数据和当前激活路径 active。

展示竖向和横向两种布局模式。

竖向模式(默认)

子菜单与图标 ​

通过 type: 'sub' 定义可展开子菜单,支持无限递归嵌套。通过 icon 属性配置图标。

展示子菜单、嵌套菜单及各类图标配置。

子菜单(sub)+ 图标

分组菜单 ​

通过 type: 'group' 将菜单项分组,每组显示标题,适用于功能模块归类。

展示分组菜单,每组有独立标题。

分组菜单(group)+ 图标

扩展功能 ​

外部链接 ​

通过 url 属性配置外部链接,点击后将在新窗口打开。

展示带有外部链接的菜单项。

外部链接

禁用与徽章 ​

通过 disabled 属性禁用菜单项,通过 badge 属性显示徽章。

展示禁用菜单项和徽章的使用。

禁用与徽章

分割线 ​

通过 divider 属性在菜单项前插入分割线。

展示分割线的使用。

分割线

API ​

Props ​

名称说明类型默认值
menu菜单数据MenuItem[][]
mode布局模式'horizontal' | 'vertical''vertical'
width垂直模式下的菜单宽度(如 240 或 '16rem')string | number-
iconWidth图标占位区宽度(px),写入 --hx-menu-icon-slot-width,折叠弹出层同步string | number-
active当前激活的菜单项 indexstring''
defaultOpeneds初始展开的 SubMenu index 数组string[][]
openeds展开的 SubMenu index 数组(v-model)string[]-
uniqueOpened是否只保持展开一个子菜单booleanfalse
menuTrigger子菜单触发方式'hover' | 'click''hover'
collapse是否折叠(vertical 模式生效)booleanfalse
backgroundColor菜单背景色string-
textColor菜单文字色string-
activeTextColor激活菜单项文字色string-
closeOnClickOutside点击菜单外是否关闭booleanfalse
collapseTransition折叠时是否有动画booleantrue
ellipsis是否显示横向菜单的省略图标booleantrue
popperOffsetpopper offsetnumber6
popperEffectpopper 效果'dark' | 'light''dark'
popperClasspopper 额外 classstring-
popperStylepopper 额外样式CSSProperties-
showTimeout子菜单展开延迟(ms)number300
hideTimeout子菜单收起延迟(ms)number300
persistent是否持久化 popper 内容booleantrue
名称说明类型默认值
type菜单项类型'item' | 'sub' | 'group''item'
title菜单项显示文本(group 分组时对应标题)string-
path路由路径(作为菜单唯一标识,item 类型必填)string-
url外部链接地址,点击后在新窗口打开(优先级高于 path)string-
icon图标配置MenuIconProps-
children子菜单MenuItem[]-
disabled是否禁用booleanfalse
badge徽章文本string | number-
divider是否显示分割线booleanfalse
名称说明类型默认值
type图标类型'svg' | 'iconify''svg'
name图标名称string-
size图标尺寸number | string-
color图标颜色string-
rotate旋转角度(deg)number-
flip翻转方向'horizontal' | 'vertical' | 'both'-

Events ​

事件名说明参数
select菜单项选中时触发(index: string, indexPath: string[], item: unknown, routerResult?: unknown)
open子菜单展开时触发(index: string, indexPath: string[])
close子菜单收起时触发(index: string, indexPath: string[])
update:openeds展开状态变化时触发(v-model)(openeds: string[])

Released under the MIT License.