Skip to content
导航有已知边界

NnContextMenu 右键菜单

受控右键菜单与视口定位。

示例

API

Props

名称类型默认值说明
openbooleanfalse受控可见状态,配合 v-model:open;通常通过 openAt 请求打开并设置坐标。
widthnumber | string224菜单宽度;数字或纯数字字符串按 px,其他字符串作为 CSS 值。
maxHeightnumber | string最大高度;数字或纯数字字符串按 px,其他值应是可用于 CSS min() 的长度。
zIndexnumber | string1200浮层层级;不能转为有限数字时回退 1200。
viewportMarginnumber | string8菜单与视口边缘的最小 px 间距;无效值回退 8,负数按 0。
titlestring | number''标题;title 插槽优先。
metastring | number''标题区右侧元信息;meta 插槽优先。
descriptionstring | number''菜单项之前的说明;同名插槽优先。
hintstring | number''菜单项之后的提示;同名插槽优先。
rootClassstring | unknown[] | object''菜单浮层根节点附加 class。
titleClassstring | unknown[] | object''标题区附加 class。
titleTextClassstring | unknown[] | object''标题文字附加 class。
metaClassstring | unknown[] | object''元信息附加 class。
descriptionClassstring | unknown[] | object''说明区附加 class。
menuClassstring | unknown[] | object''默认插槽容器附加 class。
hintClassstring | unknown[] | object''提示区附加 class。

未声明属性会转发到 Teleport 后的浮层根节点;classstyle 会与组件样式合并。

Events

事件参数说明
update:open(open: boolean)openAt 请求打开,或组件请求关闭时触发。
openChange(open: boolean)与上述组件自身请求同步触发;父组件单独改变 open 不会反向发出该事件。
close({ reason: string })关闭请求触发。内建原因包括 outsideescaperesizescrollapi

Slots

名称作用域参数说明
default菜单内容,通常放置 NnMenu 或带菜单项 role 的自定义内容。
title{ value: string | number }替换标题。
meta{ value: string | number }替换元信息。
description{ value: string | number }替换说明。
hint{ value: string | number }替换提示。

Expose

ts
interface ContextMenuPoint {
    x: number;
    y: number;
    trigger?: HTMLElement;
    triggerElement?: HTMLElement;
}

interface ContextMenuCloseOptions {
    restoreFocus?: boolean;
    reason?: string;
}
名称签名说明
openAt(source: MouseEvent | ContextMenuPoint) => Promise<boolean>阻止事件默认行为、请求打开并将菜单限制在视口内;渲染后聚焦首个可用菜单项。请求已被更新、关闭或卸载时返回 false
close(options?: boolean | ContextMenuCloseOptions) => void请求关闭;Boolean 简写表示 restoreFocus。Escape 默认恢复触发元素焦点,其他关闭原因默认不恢复。

打开后,外部 pointerdown、Escape、窗口 resize 或菜单外发生的 scroll 会请求关闭。滚动菜单自身不会关闭。

当前限制

  • 直接将 open 改为 true 而不调用 openAt 时,菜单从视口左上边距处打开。
  • 组件不会根据默认插槽内的点击自动关闭;选择菜单项后应由调用方更新 open 或调用 close()

Released under the MIT License.