Skip to content

复选框 Checkbox

允许用户从一组选项中选择一个或多个选项,在表单填写场景中,提升数据收集的准确性和操作便捷性。

基础用法

复选框的基本用法。

选项一
禁用选项
vue
<template>
  <bp-space>
    <bp-checkbox v-model="val">选项一</bp-checkbox>
    <bp-checkbox v-model="val" disabled>禁用选项</bp-checkbox>
  </bp-space>
</template>

<script setup lang="ts">
import { ref } from "vue";
const val = ref(true);
</script>

复选框组

通过 checkbox-group 实现复选框组,通过数组收集勾选选项,支持两种布局方式,分别是 verticalhorizontal(默认)。

选项一
选项二
选项三
选项四
选项一
选项二
选项三
选项四
vue
<template>
  <bp-checkbox-group v-model="val" direction="horizontal">
    <bp-checkbox v-for="v in options" :value="v">{{ v }}</bp-checkbox>
  </bp-checkbox-group>

  <bp-checkbox-group v-model="val" direction="vertical" style="margin-top: 40px;">
    <bp-checkbox v-for="v in options" :value="v">{{ v }}</bp-checkbox>
  </bp-checkbox-group>
</template>

<script setup lang="ts">
import { ref } from "vue";

const val = ref([]);
const options = ["选项一", "选项二", "选项三", "选项四"];
</script>

限制可勾选数量

checkbox-group 中,可以设置 max 以限制勾选数量

选项一
选项二
选项三
选项四
vue
<template>
  <bp-checkbox-group v-model="val" :max="2">
    <bp-checkbox v-for="v in options" :value="v">{{ v }}</bp-checkbox>
  </bp-checkbox-group>
</template>

<script setup lang="ts">
import { ref } from "vue";

const val = ref([]);
const options = ["选项一", "选项二", "选项三", "选项四"];
</script>

不确定状态

在全选的场景下,你可以通过 indeterminate 属性设置复选框的不确定状态。

全选
选项一
选项二
选项三
选项四
vue
<template>
  <bp-space>
    <bp-checkbox v-model="isSelectAll" :indeterminate @change="onSelectAllChange">全选</bp-checkbox>
  </bp-space>

  <bp-checkbox-group v-model="val" style="margin-top: 20px" @change="onChange">
    <bp-checkbox v-for="v in options" :value="v">{{ v }}</bp-checkbox>
  </bp-checkbox-group>
</template>

<script setup lang="ts">
import { ref } from "vue";

const options = ["选项一", "选项二", "选项三", "选项四"];

/**
 * 处理复选框选择的更改事件。
 * @param {string[]} e - 选中的复选框值数组。
 *
 * 如果数组为空,将 `isSelectAll` 设置为 false。
 * 如果数组长度等于选项总数,将 `indeterminate` 设置为 false。
 * 否则,将 `indeterminate` 设置为 true。
 */
const isSelectAll = ref(false);
const indeterminate = ref(false);
const onChange = (e: string[]) => {
  if (!e.length) return (isSelectAll.value = false);

  isSelectAll.value = true;
  if (e.length === options.length) return (indeterminate.value = false);

  indeterminate.value = true;
};

const val = ref<string[]>([]);
const onSelectAllChange = (v: boolean) => {
  if (!v) return (val.value = []);
  val.value = [...options];
};
</script>

Checkbox 属性

v-model绑定值
CheckboxValue
--
value复选框值
CheckboxValue
true-
disabled是否禁用
Boolean
--
indeterminate不确定状态
Boolean
--
max最大可选数量
Number
--

CheckboxGroup 属性

v-model绑定值
CheckboxValue[]
--
direction布局方式
CheckboxDirectionType
horizontal-
disabled是否禁用
Boolean
--
max最大可选数量
Number
--

Checkbox 事件

change勾选触发{model:CheckboxValue}-

CheckboxGroup 事件

change勾选触发{model:CheckboxValue[]}-