ion-checkbox
复选框允许从一组选项中选择多个选项。激活时,它们会显示为选中状态(打勾)。点击复选框将切换 checked 属性。也可以通过设置 checked 属性以编程方式选中它们。
基本用法
标签位置
开发者可以使用 labelPlacement 属性来控制标签相对于控件的位置。此属性与 flexbox 的 flex-direction 属性相对应。
对齐方式
开发者可以使用 alignment 属性来控制标签和控件在交叉轴上的对齐方式。此属性与 flexbox 的 align-items 属性相对应。
堆叠的复选框可以使用 alignment 属性进行对齐。当标签和控件需要水平居中对齐时,这很有用。
排列方式
开发者可以使用 justify 属性来控制标签和控件在行上的排列方式。此属性与 flexbox 的 justify-content 属性相对应。
ion-item 仅在演示中用于强调 justify 的工作方式。要让 justify 正常工作,并不需要 ion-item。
不确定状态复选框
标签内的链接
复选框标签有时会附带链接。这些链接可以提供与复选框相关的更多信息。但是,点击链接不应选中复选框。为了实现这一点,我们可以使用 stopPropagation 来阻止点击事件冒泡。使用这种方法时,标签的其余部分仍然保持可点击。
主题定制
CSS 自定义属性
接口
CheckboxChangeEventDetail
interface CheckboxChangeEventDetail<T = any> {
value: T;
checked: boolean;
}
CheckboxCustomEvent
虽然不是必需的,但此接口可以替代 CustomEvent 接口,以便对此组件发出的 Ionic 事件进行更强的类型检查。
interface CheckboxCustomEvent<T = any> extends CustomEvent {
detail: CheckboxChangeEventDetail<T>;
target: HTMLIonCheckboxElement;
}
从旧版复选框语法迁移
Ionic 7.0 中引入了更简洁的复选框语法。这种新语法减少了设置复选框所需的样板代码,解决了可访问性问题,并改善了开发体验。
开发者可以逐个复选框进行迁移。虽然开发者可以继续使用旧版语法,但我们建议尽快迁移。
使用现代语法
使用现代语法需要移除 ion-label,并将标签直接传递到 ion-checkbox 内部。标签的位置可以通过 ion-checkbox 上的 labelPlacement 属性进行配置。标签和控件在行上的排列方式可以通过 ion-checkbox 上的 justify 属性来控制。
- JavaScript
- Angular
- React
- Vue
<!-- 基础用法 -->
<!-- 之前 -->
<ion-item>
<ion-label>复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox>复选框标签</ion-checkbox>
</ion-item>
<!-- 固定标签 -->
<!-- 之前 -->
<ion-item>
<ion-label position="fixed">复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox label-placement="fixed">复选框标签</ion-checkbox>
</ion-item>
<!-- 复选框在行首,标签在行尾 -->
<!-- 之前 -->
<ion-item>
<ion-label slot="end">复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox label-placement="end">复选框标签</ion-checkbox>
</ion-item>
<!-- 基础用法 -->
<!-- 之前 -->
<ion-item>
<ion-label>复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox>复选框标签</ion-checkbox>
</ion-item>
<!-- 固定标签 -->
<!-- 之前 -->
<ion-item>
<ion-label position="fixed">复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox labelPlacement="fixed">复选框标签</ion-checkbox>
</ion-item>
<!-- 复选框在行首,标签在行尾 -->
<!-- 之前 -->
<ion-item>
<ion-label slot="end">复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox labelPlacement="end">复选框标签</ion-checkbox>
</ion-item>
{/* 基础用法 */}
{/* 之前 */}
<IonItem>
<IonLabel>复选框标签</IonLabel>
<IonCheckbox></IonCheckbox>
</IonItem>
{/* 之后 */}
<IonItem>
<IonCheckbox>复选框标签</IonCheckbox>
</IonItem>
{/* 固定标签 */}
{/* 之前 */}
<IonItem>
<IonLabel position="fixed">复选框标签</IonLabel>
<IonCheckbox></IonCheckbox>
</IonItem>
{/* 之后 */}
<IonItem>
<IonCheckbox labelPlacement="fixed">复选框标签</IonCheckbox>
</IonItem>
{/* 复选框在行首,标签在行尾 */}
{/* 之前 */}
<IonItem>
<IonLabel slot="end">复选框标签</IonLabel>
<IonCheckbox></IonCheckbox>
</IonItem>
{/* 之后 */}
<IonItem>
<IonCheckbox labelPlacement="end">复选框标签</IonCheckbox>
</IonItem>
<!-- 基础用法 -->
<!-- 之前 -->
<ion-item>
<ion-label>复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox>复选框标签</ion-checkbox>
</ion-item>
<!-- 固定标签 -->
<!-- 之前 -->
<ion-item>
<ion-label position="fixed">复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox label-placement="fixed">复选框标签</ion-checkbox>
</ion-item>
<!-- 复选框在行首,标签在行尾 -->
<!-- 之前 -->
<ion-item>
<ion-label slot="end">复选框标签</ion-label>
<ion-checkbox></ion-checkbox>
</ion-item>
<!-- 之后 -->
<ion-item>
<ion-checkbox label-placement="end">复选框标签</ion-checkbox>
</ion-item>