Skip to content

下拉菜单

Props ​

名称类型默认值说明
buttonDropdownMenuButtonProps{ label: 'Menu' }触发按钮的属性,等同于 Button 的属性(其中 clickAction 除外,避免和菜单抢同一次点击)。size 会同时决定菜单行的高度。
itemsDropdownMenuOption[]-数据式菜单内容。每条可以是一条动作、一条分隔线 { type: 'divider' },或一个分组 { type: 'section', title, items }。与默认插槽互斥,同时给出时以 items 为准。
isMenuOpenboolean-受控的展开状态,配 v-model:is-menu-open 使用。留空时菜单自己管理开关。挂载时即为 true 不会移动焦点。
menuWidthnumber | string-菜单的最小宽度。长度值可以随内容变宽;max-content 之类的固有尺寸关键字则作为首选宽度。所有写法都会受视口限制。留空时与触发按钮齐平,并封顶在 320px。
menuMaxHeightnumber-菜单的最大高度,单位为像素,用于必须放下所有行的菜单。它会抬高默认的 300px 上限,但视口仍然限住实际高度。
placement'above' | 'below' | 'start' | 'end''below'菜单相对触发按钮的位置。空间不足时自动翻到相反方向。
alignment'start' | 'center' | 'end''start'菜单沿位置方向与触发按钮的对齐方式。
hasChevronbooleantrue是否在触发按钮尾部显示箭头。纯图标按钮不会显示。
名称类型默认值说明
labelstring | number-行内的主要文字。需要富文本时改用 label 插槽。
descriptionstring | number-标签下方的次要说明文字。需要富文本时改用 description 插槽。
iconstring | Component-标签前的图标:一个 CSS 图标类(例如 UnoCSS 的 i-carbon-copy,也可以是你自己的类名),或一个绘制 SVG 的组件。astryx-vue 不自带图标。想放任意内容时改用 icon 插槽。
isDisabledbooleanfalse禁用这一行。禁用的行会被方向键和字母跳转跳过,并且不响应点击。
variant'default' | 'destructive''default'视觉变体。destructive 会把标签、说明和图标一起换成错误色,用于删除这类危险动作。悬停底色仍是共用的中性色,与其他行一致。
hasCloseOnSelectbooleantrue激活这一行后是否收起菜单。像“复制”这种在行内回报结果的动作可以设为 false。
hrefstring-这一行要跳转的地址。给出后整行就是一个带 role="menuitem" 的链接,所以 ⌘/Ctrl 点击和中键点击仍然保持浏览器原本的含义。
target'_blank' | '_self'-链接的打开方式,仅在给出 href 时使用。
relstring-链接关系,仅在给出 href 时使用。target="_blank" 时会自动加上 noopener 和 noreferrer。
onClick(event: MouseEvent) => void-激活这一行时调用。链接行会在浏览器跳转前调用;带修饰键的点击交给浏览器处理,不调用它。
名称类型默认值说明
titlestring | number-分组上方的标题,同时作为这一组的无障碍名称。留空时分组没有名字。

DropdownMenuDivider 没有属性,它渲染一条 role="separator" 的分隔线,因此永远不会成为方向键的一站。

事件 ​

名称参数说明
update:isMenuOpenboolean展开状态发生变化,配合 v-model:is-menu-open 使用。
openChangeboolean展开状态发生变化时触发,与 update:isMenuOpen 同时发出。
click-触发按钮被激活时触发(打开和收起都会触发)。
click(DropdownMenuItem)MouseEvent这一行被激活时触发。

插槽 ​

名称说明
default自己写菜单内容时使用:DropdownMenuItem、DropdownMenuGroup 和 DropdownMenuDivider。与 items 互斥。
trigger自定义触发控件时使用。插槽参数包含 id、aria-haspopup、aria-expanded、aria-controls、onClick 和 onKeyDown,请整份 v-bind 到控件上。
icon(DropdownMenuItem)代替 icon 属性的任意起始内容。
label / description(DropdownMenuItem)代替同名属性的富文本内容。
endContent(DropdownMenuItem)行尾内容,例如一个 Kbd 快捷键提示。
title / default(DropdownMenuGroup)分组的富文本标题,以及组内的行。

原生属性 ​

除下表列出的属性外,其余原生属性会落到菜单浮层元素上:

  • HTML 属性、data-* 属性。
  • aria-* 属性。
  • class、style。

菜单元素默认带一个生成的 id,触发按钮的 aria-controls 指向它。显式传入 id 会同时替换这个生成的 id 和 aria-controls 的值,两者不会脱节。传入 aria-label 或 aria-labelledby 会覆盖菜单默认的名称(默认取自触发按钮的文字,自定义触发控件时则指向控件自身)。

触发按钮上会带上 aria-haspopup="menu"、aria-expanded 和 aria-controls;触发按钮外层是一个用于定位的 span.astryx-dropdown-menu-trigger。