Checkbox 复选框

介绍

在一组备选项中进行多选。

引入

通过以下方式来全局注册组件,更多注册方式请参考组件注册

  1. import { createApp } from 'vue';
  2. import { Checkbox, CheckboxGroup } from 'vant';
  3. const app = createApp();
  4. app.use(Checkbox);
  5. app.use(CheckboxGroup);

代码演示

基础用法

通过 v-model 绑定复选框的勾选状态。

  1. <van-checkbox v-model="checked">复选框</van-checkbox>
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const checked = ref(true);
  5. return { checked };
  6. },
  7. };

禁用状态

通过设置 disabled 属性可以禁用复选框。

  1. <van-checkbox v-model="checked" disabled>复选框</van-checkbox>

自定义形状

shape 属性设置为 square,复选框的形状会变成方形。

  1. <van-checkbox v-model="checked" shape="square">复选框</van-checkbox>

自定义颜色

通过 checked-color 属性设置选中状态的图标颜色。

  1. <van-checkbox v-model="checked" checked-color="#ee0a24">复选框</van-checkbox>

自定义大小

通过 icon-size 属性可以自定义图标的大小。

  1. <van-checkbox v-model="checked" icon-size="24px">复选框</van-checkbox>

自定义图标

通过 icon 插槽自定义图标,可以通过 slotProps 判断是否为选中状态.

  1. <van-checkbox v-model="checked">
  2. 自定义图标
  3. <template #icon="props">
  4. <img class="img-icon" :src="props.checked ? activeIcon : inactiveIcon" />
  5. </template>
  6. </van-checkbox>
  7. <style>
  8. .img-icon {
  9. height: 20px;
  10. }
  11. </style>
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const checked = ref(true);
  5. return {
  6. checked,
  7. activeIcon:
  8. 'https://fastly.jsdelivr.net/npm/@vant/assets/user-active.png',
  9. inactiveIcon:
  10. 'https://fastly.jsdelivr.net/npm/@vant/assets/user-inactive.png',
  11. };
  12. },
  13. };

禁用文本点击

设置 label-disabled 属性后,点击图标以外的内容不会触发复选框切换。

  1. <van-checkbox v-model="checked" label-disabled>复选框</van-checkbox>

复选框组

复选框可以与复选框组一起使用,复选框组通过 v-model 数组绑定复选框的勾选状态。

  1. <van-checkbox-group v-model="checked">
  2. <van-checkbox name="a">复选框 a</van-checkbox>
  3. <van-checkbox name="b">复选框 b</van-checkbox>
  4. </van-checkbox-group>
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const checked = ref(['a', 'b']);
  5. return { checked };
  6. },
  7. };

水平排列

direction 属性设置为 horizontal 后,复选框组会变成水平排列。

  1. <van-checkbox-group v-model="checked" direction="horizontal">
  2. <van-checkbox name="a">复选框 a</van-checkbox>
  3. <van-checkbox name="b">复选框 b</van-checkbox>
  4. </van-checkbox-group>
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const checked = ref([]);
  5. return { checked };
  6. },
  7. };

限制最大可选数

通过 max 属性可以限制复选框组的最大可选数。

  1. <van-checkbox-group v-model="checked" :max="2">
  2. <van-checkbox name="a">复选框 a</van-checkbox>
  3. <van-checkbox name="b">复选框 b</van-checkbox>
  4. <van-checkbox name="c">复选框 c</van-checkbox>
  5. </van-checkbox-group>

全选与反选

通过 CheckboxGroup 实例上的 toggleAll 方法可以实现全选与反选。

  1. <van-checkbox-group v-model="checked" ref="checkboxGroup">
  2. <van-checkbox name="a">复选框 a</van-checkbox>
  3. <van-checkbox name="b">复选框 b</van-checkbox>
  4. <van-checkbox name="c">复选框 c</van-checkbox>
  5. </van-checkbox-group>
  6. <van-button type="primary" @click="checkAll">全选</van-button>
  7. <van-button type="primary" @click="toggleAll">反选</van-button>
  1. import { ref } from 'vue';
  2. export default {
  3. setup() {
  4. const checked = ref([]);
  5. const checkboxGroup = ref(null);
  6. const checkAll = () => {
  7. checkboxGroup.value.toggleAll(true);
  8. }
  9. const toggleAll = () => {
  10. checkboxGroup.value.toggleAll();
  11. },
  12. return {
  13. checked,
  14. checkAll,
  15. toggleAll,
  16. checkboxGroup,
  17. };
  18. },
  19. };

搭配单元格组件使用

搭配单元格组件使用时,需要再引入 CellCellGroup 组件,并通过 Checkbox 实例上的 toggle 方法触发切换。

  1. <van-checkbox-group v-model="checked">
  2. <van-cell-group inset>
  3. <van-cell
  4. v-for="(item, index) in list"
  5. clickable
  6. :key="item"
  7. :title="`复选框 ${item}`"
  8. @click="toggle(index)"
  9. >
  10. <template #right-icon>
  11. <van-checkbox
  12. :name="item"
  13. :ref="el => checkboxRefs[index] = el"
  14. @click.stop
  15. />
  16. </template>
  17. </van-cell>
  18. </van-cell-group>
  19. </van-checkbox-group>
  1. import { ref, onBeforeUpdate } from 'vue';
  2. export default {
  3. setup() {
  4. const checked = ref([]);
  5. const checkboxRefs = ref([]);
  6. const toggle = (index) => {
  7. checkboxRefs.value[index].toggle();
  8. };
  9. onBeforeUpdate(() => {
  10. checkboxRefs.value = [];
  11. });
  12. return {
  13. list: ['a', 'b'],
  14. toggle,
  15. checked,
  16. checkboxRefs,
  17. };
  18. },
  19. };

API

Checkbox Props

参数说明类型默认值
v-model是否为选中状态booleanfalse
name标识符,通常为一个唯一的字符串或数字any-
shape形状,可选值为 squarestringround
disabled是否禁用复选框booleanfalse
label-disabled是否禁用复选框文本点击booleanfalse
label-position文本位置,可选值为 leftstringright
icon-size图标大小,默认单位为 pxnumber | string20px
checked-color选中状态颜色string#1989fa
bind-group是否与复选框组绑定booleantrue

CheckboxGroup Props

参数说明类型默认值
v-model所有选中项的标识符any[]-
disabled是否禁用所有复选框booleanfalse
max最大可选数,0 为无限制number | string0
direction排列方向,可选值为 horizontalstringvertical
icon-size所有复选框的图标大小,默认单位为 pxnumber | string20px
checked-color所有复选框的选中状态颜色string#1989fa

Checkbox Events

事件名说明回调参数
change当绑定值变化时触发的事件checked: boolean
click点击复选框时触发event: MouseEvent

CheckboxGroup Events

事件名说明回调参数
change当绑定值变化时触发的事件names: any[]

Checkbox Slots

名称说明参数
default自定义文本-
icon自定义图标{ checked: boolean, disabled: boolean }

CheckboxGroup 方法

通过 ref 可以获取到 CheckboxGroup 实例并调用实例方法,详见组件实例方法

方法名说明参数返回值
toggleAll切换所有复选框,传 true 为选中,false 为取消选中,不传参为取反options?: boolean | object-

toggleAll 方法示例

  1. import { ref } from 'vue';
  2. import type { CheckboxGroupInstance } from 'vant';
  3. const checkboxGroupRef = ref<CheckboxGroupInstance>();
  4. // 全部反选
  5. checkboxGroupRef?.value.toggleAll();
  6. // 全部选中
  7. checkboxGroupRef?.value.toggleAll(true);
  8. // 全部取消
  9. checkboxGroupRef?.value.toggleAll(false);
  10. // 全部反选,并跳过禁用的复选框
  11. checkboxGroupRef?.value.toggleAll({
  12. skipDisabled: true,
  13. });
  14. // 全部选中,并跳过禁用的复选框
  15. checkboxGroupRef?.value.toggleAll({
  16. checked: true,
  17. skipDisabled: true,
  18. });

Checkbox 方法

通过 ref 可以获取到 Checkbox 实例并调用实例方法,详见组件实例方法

方法名说明参数返回值
toggle切换选中状态,传 true 为选中,false 为取消选中,不传参为取反checked?: boolean-

类型定义

组件导出以下类型定义:

  1. import type {
  2. CheckboxProps,
  3. CheckboxShape,
  4. CheckboxInstance,
  5. CheckboxLabelPosition,
  6. CheckboxGroupProps,
  7. CheckboxGroupInstance,
  8. CheckboxGroupDirection,
  9. CheckboxGroupToggleAllOptions,
  10. } from 'vant';

CheckboxInstanceCheckboxGroupInstance 是组件实例的类型,用法如下:

  1. import { ref } from 'vue';
  2. import type { CheckboxInstance, CheckboxGroupInstance } from 'vant';
  3. const checkboxRef = ref<CheckboxInstance>();
  4. const checkboxGroupRef = ref<CheckboxGroupInstance>();
  5. checkboxRef.value?.toggle();
  6. checkboxGroupRef.value?.toggleAll();

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值描述
—van-checkbox-size20px-
—van-checkbox-border-colorvar(—van-gray-5)-
—van-checkbox-durationvar(—van-duration-fast)-
—van-checkbox-label-marginvar(—van-padding-xs)-
—van-checkbox-label-colorvar(—van-text-color)-
—van-checkbox-checked-icon-colorvar(—van-primary-color)-
—van-checkbox-disabled-icon-colorvar(—van-gray-5)-
—van-checkbox-disabled-label-colorvar(—van-text-color-3)-
—van-checkbox-disabled-backgroundvar(—van-border-color)-

Checkbox 复选框 - 图1