Skip to content

切换按钮

ToggleButton Props ​

名称类型默认值说明
labelstring必需按钮的无障碍名称。有默认插槽内容时它是无障碍名称,纯图标模式下同时是 aria-label;两者都没有时它是可见文字。
isPressedbooleanfalse是否处于按下状态,用 v-model:is-pressed 绑定。不绑定该属性时按钮自己管理按下状态,初始为未按下。放入 ToggleButtonGroup 后由分组接管,该属性失效。
size'sm' | 'md' | 'lg''md'按钮尺寸。留空时沿用所在分组的 size,分组也没有则回退到 md。
elevation'none' | 'low' | 'med' | 'high''none'静止状态下的阴影强度,用于悬浮样式的切换按钮,取值与 Button 一致。放入分组后每个成员仍保留自己的阴影。
isDisabledbooleanfalse是否禁用。分组的 isDisabled 会禁用全部成员;成员自己禁用自己时,启用中的分组不会把它重新启用。带 tooltip 时改用 aria-disabled,按钮仍可获得焦点以读出禁用原因。
isLoadingbooleanfalse是否显示加载状态。同时设置 aria-busy,内容隐藏并显示转圈指示。
isIconOnlybooleanfalse渲染为正方形纯图标按钮,用 label 作为无障碍名称,不渲染标签文字和占位元素。
pressedChangeAction(isPressed: boolean) => void | Promise<void>-由接口或路由支撑的切换动作。在 pressedChange 之后执行,除非该回调阻止了默认行为;执行期间按钮显示下一个状态和加载指示,并允许再次点击来反转尚未完成的选择。分组中带 value 的成员会忽略它。
tooltipstring-悬停和键盘聚焦时显示的文字提示,纯图标按钮常用它补足含义。
valuestring-在 ToggleButtonGroup 中标识自己的值,分组用它判断按下状态;独立使用时不参与表单提交。

ToggleButtonGroup Props ​

名称类型默认值说明
labelstring必需分组的无障碍名称,渲染为 role="group" 容器上的 aria-label。
type'single' | 'multiple''single'选择模式。single 只允许一个成员按下,再次点击当前项会取消选择;multiple 允许多个成员同时按下。
valuestring | null | string[]null当前选中的值,用 v-model:value 绑定。单选模式是字符串或 null,多选模式是字符串数组(默认空数组)。
orientation'horizontal' | 'vertical''horizontal'成员的排列方向。垂直时成员拉伸为整行宽度。
size'sm' | 'md' | 'lg''md'成员继承的默认尺寸,成员自己设置 size 时以成员为准。
isDisabledbooleanfalse是否禁用全部成员。成员自己设置 isDisabled 时同样保持禁用。

事件 ​

名称载荷说明
pressedChange(isPressed: boolean, event: MouseEvent)点击要求切换到的状态和原始的点击事件。在回调里调用 event.preventDefault() 表示这次切换由你处理,组件不改写状态,也跳过 pressedChangeAction。
update:isPressed(isPressed: boolean)供 v-model:is-pressed 使用。回调阻止默认行为时不会发出。
click(event: MouseEvent)透传的点击事件,在切换请求之后发出。按钮被禁用时不会发出。
change(value: string | null | string[])分组的选择结果:单选模式是字符串或 null,多选模式是数组。

插槽 ​

名称说明
default可见内容,会取代 label 作为可见文字,无障碍名称仍然取自 label。留空时渲染 label。
icon标签前的装饰图标;纯图标模式下它是唯一内容。把图标类放进一个有尺寸的元素,例如 <span class="i-carbon-filter" style="width: 16px; height: 16px" />,以匹配按钮的图标盒子。
pressedIcon按下时显示的图标,通常换成一枚实心图标。留空时退回 icon。图形的颜色由元素自己决定,所以要传入已经着色的元素,例如 <span class="i-carbon-stop-filled" style="color: var(--astryx-icon-error-foreground)" />。

ToggleButtonGroup 通过默认插槽接收 ToggleButton:

名称说明
default组内的 ToggleButton 成员,每个成员都需要自己的 value。

键盘 ​

按键行为
Tab依次聚焦每一个可用的切换按钮;分组不会把成员合并成单个 tab 停靠点。
Enter / Space切换当前焦点所在的按钮,与点击等价。

分组本身不拦截方向键:每个成员都是独立的 tab 停靠点,Tab 逐个经过,方向键不会在成员之间移动焦点(这一点与 ButtonGroup 不同)。禁用的成员会被跳过,带 tooltip 的禁用成员仍可获得焦点以便读出禁用原因。

模板引用 ​

ToggleButton 公开以下内容:

  • element:HTMLButtonElement | HTMLAnchorElement | HTMLElement | null。
  • focus(options?: FocusOptions):聚焦按钮。
  • blur():移除按钮焦点。

原生属性 ​

根元素为 <button type="button">。

以下内容传入根元素:

  • HTML 属性。
  • aria-* 属性。
  • data-* 属性。
  • class。
  • style。
  • 原生事件监听器。

aria-pressed 由组件根据按下状态设置,data-pressed、data-variant="ghost" 和 data-size 供主题选择器使用,不要覆盖。aria-label 在纯图标模式下取自 label。