Skip to content

Switch 开关 ​

立即生效的开关:改了就生效,没有「提交」这一步。待提交的勾选请用 Checkbox。

基础用法

立即生效的开关:改了就生效,没有「提交」这一步。受控值同 checkbox:checked + ptChange。

<pt-switch>开启通知</pt-switch>
<pt-switch checked>已开启</pt-switch>
尺寸

sm 给密集列表 / 表格用:一行只有 32–40px 高时,20px 的开关会顶满整行。

<pt-switch>md(默认)</pt-switch>
<pt-switch size="sm">sm</pt-switch>
禁用

外层 <fieldset disabled> 也会让它一起禁用。

<pt-switch disabled>禁用</pt-switch>
<pt-switch disabled checked>禁用且已开启</pt-switch>

什么时候用哪个 ​

  • Checkbox:待提交的勾选。放在表单里,和别的字段一起提交。
  • Switch:立即生效的开关。改了就生效,没有「提交」这一步。

两者的受控值都是 checked + ptChange,键盘行为也一样,区别只在语义。 Checkbox 的页面在这里。

键盘操作 ​

按键行为
Space切换
Enter不切换 —— 与原生 checkbox 一致,Enter 留给表单提交

无障碍 ​

轨道是 role="switch",可访问名来自插槽里的标签文案。插槽里没有文案时(例如表格里的一列开关) 必须给 aria-label —— 在 React / Vue / Angular 包装层里属性名是 ariaLabelText。

标签文案里放了链接或按钮时,点它们是在用它们,不是在切换 —— 与原生 <label> 处理交互式子元素的方式一致。

表单里的值 ​

未打开时提交 null(字段不出现在 FormData 里),打开时提交 value(默认 "on"), 与原生 checkbox 一致。表单重置时回到初始状态;外层 <fieldset disabled> 会让它一起禁用。

API ​

属性

属性Attribute类型默认值说明
ariaLabelTextaria-labelstring | undefined—无障碍名称:原生 HTML 里写 aria-label,React / Vue / Angular 包装层里属性名是 ariaLabelText。 插槽里没有标签文案时(如表格里的一列开关)必须给;给了它就不再用插槽文案做可访问名。
checkedcheckedbooleanfalse是否打开。受控值:与 ptChange 配对,包装层据此生成 v-model / ngModel
disableddisabledbooleanfalse禁用。只反映使用方自己写的值:外层原生 `<fieldset disabled>`、pt-field / pt-field-set 的禁用另经继承通道生效,不改写它
inheritedDisabledinherited-disabledbooleanfalse外层 pt-field / pt-field-set 下发的禁用。内部继承通道:由它们以 attribute 维护,不建议使用方直接写。 有效禁用是 `disabled` 与它的并集;父元素只写这一条、不碰 `disabled`,读 `el.disabled` 得到的始终是使用方自己写的值
inheritedInvalidinherited-invalidbooleanfalse外层 pt-field 下发的出错态。内部继承通道:由 pt-field 维护,不建议使用方直接写。有效出错是 `invalid` 与它的并集
inheritedRequiredinherited-requiredbooleanfalse外层 pt-field 下发的必填。内部继承通道:由 pt-field 维护,不建议使用方直接写。有效必填是 `required` 与它的并集
invalidinvalidbooleanfalse出错态。校验信息由使用方展示,组件只负责视觉、aria-invalid 与表单校验状态(customError)
namenamestring | undefined—提交表单时的字段名
requiredrequiredbooleanfalse必填:未打开时表单校验报 valueMissing,并标注 aria-required
sizesize"md" | "sm"'md'sm 给密集列表 / 表格用:一行只有 32–40px 高时,20px 的开关会顶满整行
valuevaluestring'on'提交表单时的值,默认 "on"(与原生 checkbox 一致)。未打开时整个字段不出现在 FormData 里

事件

事件detail 类型说明
ptBlurvoid内部控件失去焦点
ptChangeboolean开关状态变化,detail 是切换后的 checked。Vue 的 v-model 与 Angular 的 ngModel 绑在它上面
ptFocusvoid内部控件获得焦点

方法

方法说明
setFocus(options?: FocusOptions) => Promise<void>

插槽

名称说明
(默认)标签文案

可定制的内部元素(::part())

part说明
base最外层容器(label)
label
thumb拇指
track轨道

Apache-2.0 协议开源