Skip to content

Menu 导航菜单 ​

用于网站顶部或侧边的导航栏,支持 mode: 'horizontal' | 'vertical' 布局、多级嵌套 SubMenu 折叠动画以及与 vue-router 联动路由跳转。

预览 ​

Preview
Menu 导航菜单

安装 ​

pnpm dlx brutx-vue@latest add menu

用法 ​

垂直模式 ​

vue
<script setup>
import { ref } from 'vue'
import { Menu, MenuItem, SubMenu } from 'brutx-ui-vue'

const active = ref('1')
</script>

<template>
    <Menu default-active="1" mode="vertical" @select="idx => active = idx">
        <MenuItem index="1">首页</MenuItem>
        <SubMenu index="sub-admin" title="管理面板">
            <MenuItem index="admin-users">用户管理</MenuItem>
            <MenuItem index="admin-settings">系统设置</MenuItem>
        </SubMenu>
        <MenuItem index="3" disabled>禁用项目</MenuItem>
    </Menu>
</template>

水平模式 ​

设置 mode="horizontal" 可以调整菜单布局为水平横排。在此模式下,嵌套的 SubMenu 会以悬浮框(绝对定位)的形式显示。

指针进入或离开子菜单时,展开与收起使用短暂延迟;快速移回会取消待处理的收起动作。按 Escape、选择菜单项、点击外部、禁用或卸载时会清理待处理的悬停动作。

vue
<script setup>
import { ref } from 'vue'
import { Menu, MenuItem, SubMenu } from 'brutx-ui-vue'

const active = ref('home')
</script>

<template>
    <Menu default-active="home" mode="horizontal" @select="idx => active = idx">
        <MenuItem index="home">首页</MenuItem>
        <SubMenu index="products" title="产品中心">
            <MenuItem index="product-1">云服务器</MenuItem>
            <MenuItem index="product-2">数据库</MenuItem>
        </SubMenu>
        <MenuItem index="about">关于我们</MenuItem>
    </Menu>
</template>

路由联动 ​

设置 router 属性为 true 后,点击 MenuItem 会自动利用 Vue Router 进行路由跳转。绑定的目标可以是 route 属性,如果没有指定,则默认使用菜单项的 index 作为路径。

vue
<template>
    <Menu router default-active="/home" mode="vertical">
        <MenuItem index="/home">首页</MenuItem>
        <MenuItem index="/users" :route="{ name: 'UsersList' }">用户中心</MenuItem>
        <MenuItem index="/settings">系统设置</MenuItem>
    </Menu>
</template>

子组件 ​

组件说明
Menu菜单根组件,提供上下文状态
MenuItem菜单项组件
SubMenu子菜单组件,用于嵌套及折叠内容

API 参考 ​

Menu

Menu — 属性
名称类型默认值说明
mode
"vertical" | "horizontal" | undefined
"vertical"
设置菜单项的排列方向,可选水平或垂直。
详情

声明类型

"vertical" | "horizontal" | undefined

字面量

  • "horizontal"
  • "vertical"

默认值详情

解析值
"vertical"

来源

Menu.vue:9

packages/ui/src/components/menu/Menu.vue

defaultActive
string | undefined
""
设置初始高亮菜单项的 index;该值也用于初始化当前激活项。
详情

声明类型

string | undefined

默认值详情

解析值
""

来源

Menu.vue:11

packages/ui/src/components/menu/Menu.vue

router
boolean | undefined
false
启用后,带 route 的菜单项会通过 vue-router 进行导航。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

Menu.vue:13

packages/ui/src/components/menu/Menu.vue

class
string | undefined
undefined
追加到菜单根元素的 CSS 类。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Menu.vue:15

packages/ui/src/components/menu/Menu.vue

Menu — 事件
名称签名或类型说明
@select
[index: string]
菜单项被选中时发出其 index。
详情

声明类型

[index: string]

来源

Menu.vue

packages/ui/src/components/menu/Menu.vue

Menu — 插槽
名称签名或类型说明
#default
{}
菜单内容,通常包含 MenuItem 和 SubMenu。
详情

声明类型

{}

来源

Menu.vue

packages/ui/src/components/menu/Menu.vue

MenuItem

MenuItem — 属性
名称类型默认值说明
index
必填
string
—
菜单项唯一标识,用于激活状态和 select 事件;路由模式下也用于匹配当前路由。
详情

声明类型

string

默认值详情

未声明默认值
—

来源

MenuItem.vue:9

packages/ui/src/components/menu/MenuItem.vue

disabled
boolean | undefined
false
禁用该菜单项的选择和导航交互。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

MenuItem.vue:11

packages/ui/src/components/menu/MenuItem.vue

route
string | Record<string, unknown> | undefined
undefined
路由模式下点击此项要导航到的路径或路由对象。
详情

声明类型

string | Record<string, unknown> | undefined

默认值详情

解析值
undefined

来源

MenuItem.vue:13

packages/ui/src/components/menu/MenuItem.vue

inset
boolean | undefined
false
缩进菜单项内容,使其与含图标的项对齐。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

MenuItem.vue:15

packages/ui/src/components/menu/MenuItem.vue

class
string | undefined
undefined
追加到菜单项根元素的 CSS 类。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

MenuItem.vue:17

packages/ui/src/components/menu/MenuItem.vue

MenuItem — 插槽
名称签名或类型说明
#default
{}
菜单项的标签内容,可包含图标。
详情

声明类型

{}

来源

MenuItem.vue

packages/ui/src/components/menu/MenuItem.vue

SubMenu

SubMenu — 属性
名称类型默认值说明
index
必填
string
—
子菜单唯一标识,用于菜单状态和嵌套层级标识。
详情

声明类型

string

默认值详情

未声明默认值
—

来源

SubMenu.vue:11

packages/ui/src/components/menu/SubMenu.vue

title
string | undefined
""
子菜单触发器标题;提供 title 插槽时由插槽内容呈现。
详情

声明类型

string | undefined

默认值详情

解析值
""

来源

SubMenu.vue:13

packages/ui/src/components/menu/SubMenu.vue

disabled
boolean | undefined
false
禁用子菜单触发器,阻止展开交互。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

SubMenu.vue:15

packages/ui/src/components/menu/SubMenu.vue

inset
boolean | undefined
false
缩进子菜单触发器内容,使其与含图标的菜单项对齐。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

SubMenu.vue:17

packages/ui/src/components/menu/SubMenu.vue

class
string | undefined
undefined
追加到子菜单根容器的 CSS 类。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

SubMenu.vue:19

packages/ui/src/components/menu/SubMenu.vue

triggerClass
string | undefined
undefined
追加到子菜单标题触发器的 CSS 类。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

SubMenu.vue:21

packages/ui/src/components/menu/SubMenu.vue

SubMenu — 插槽
名称签名或类型说明
#title
{}
自定义子菜单触发器内容;提供时优先于 title 属性。
详情

声明类型

{}

来源

SubMenu.vue

packages/ui/src/components/menu/SubMenu.vue

#default
{}
子菜单内容,可包含 MenuItem 或继续嵌套 SubMenu。
详情

声明类型

{}

来源

SubMenu.vue

packages/ui/src/components/menu/SubMenu.vue

可访问性 ​

  • 键盘操作:支持使用 Enter 或 Space 键激活 MenuItem 或展开/收起 SubMenu。
  • ARIA 属性:根组件自动设置 role="menubar",各菜单项使用 role="menuitem"。子菜单触发器自动管理 aria-haspopup="true" 和 aria-expanded 属性。
  • 动效降级:垂直模式下的折叠动画支持 prefers-reduced-motion 自动降级(如适用)。

蛮力铸就。