Checkbox 多选框
多选框。
何时使用
- 在一组可选项中进行多项选择时;
- 单独使用可以表示两种状态之间的切换,和
switch
类似。区别在于切换switch
会直接触发状态改变,而checkbox
一般用于状态标记,需要和提交操作配合。
代码演示
Checkbox
简单的 checkbox
<template>
<a-checkbox v-model:checked="checked">Checkbox</a-checkbox>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
return {
checked: ref(false),
};
},
});
</script>
Unchecked-Enabled
CheckDisable
联动checkbox
<template>
<p :style="{ marginBottom: '20px' }">
<a-checkbox v-model:checked="checked" :disabled="disabled">
{{ label }}
</a-checkbox>
</p>
<p>
<a-button type="primary" size="small" @click="toggleChecked">
{{ !checked ? 'Check' : 'Uncheck' }}
</a-button>
<a-button :style="{ marginLeft: '10px' }" type="primary" size="small" @click="toggleDisable">
{{ !disabled ? 'Disable' : 'Enable' }}
</a-button>
</p>
</template>
<script lang="ts">
import { computed, defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
const checked = ref(false);
const disabled = ref(false);
const toggleChecked = () => {
checked.value = !checked.value;
};
const toggleDisable = () => {
disabled.value = !disabled.value;
};
const label = computed(() => {
return `${checked.value ? 'Checked' : 'Unchecked'}-${
disabled.value ? 'Disabled' : 'Enabled'
}`;
});
return {
label,
checked,
disabled,
toggleChecked,
toggleDisable,
};
},
});
</script>
方便的从数组生成 checkbox
<template>
<a-checkbox-group v-model:value="value1" name="checkboxgroup" :options="plainOptions" />
<br />
<a-checkbox-group v-model:value="value2" :options="plainOptions" />
<br />
<a-checkbox-group v-model:value="value3" :options="options" :value="['Pear']" />
<br />
<a-checkbox-group v-model:value="value4" :options="optionsWithDisabled" disabled>
<template #label="{ value }">
<span style="color: red">{{ value }}</span>
</template>
</a-checkbox-group>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs } from 'vue';
const plainOptions = ['Apple', 'Pear', 'Orange'];
const options = [
{ label: 'Apple', value: 'Apple' },
{ label: 'Pear', value: 'Pear' },
{ label: 'Orange', value: 'Orange' },
];
const optionsWithDisabled = [
{ value: 'Apple' },
{ label: 'Pear', value: 'Pear' },
{ label: 'Orange', value: 'Orange', disabled: false },
];
export default defineComponent({
data() {
const state = reactive({
value1: [],
value2: ['Apple'],
value3: ['Pear'],
value4: ['Apple'],
});
return {
plainOptions,
options,
optionsWithDisabled,
...toRefs(state),
};
},
});
</script>
在实现全选效果时,你可能会用到 indeterminate
属性
<template>
<div :style="{ borderBottom: '1px solid #E9E9E9' }">
<a-checkbox
v-model:checked="checkAll"
:indeterminate="indeterminate"
@change="onCheckAllChange"
>
Check all
</a-checkbox>
</div>
<br />
<a-checkbox-group v-model:value="checkedList" :options="plainOptions" />
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs, watch } from 'vue';
const plainOptions = ['Apple', 'Pear', 'Orange'];
export default defineComponent({
setup() {
const state = reactive({
indeterminate: true,
checkAll: false,
checkedList: ['Apple', 'Orange'],
});
const onCheckAllChange = (e: any) => {
Object.assign(state, {
checkedList: e.target.checked ? plainOptions : [],
indeterminate: false,
});
};
watch(
() => state.checkedList,
val => {
state.indeterminate = !!val.length && val.length < plainOptions.length;
state.checkAll = val.length === plainOptions.length;
},
);
return {
...toRefs(state),
plainOptions,
onCheckAllChange,
};
},
});
</script>
checkbox 不可用
<template>
<a-checkbox v-model:checked="checked1" disabled />
<br />
<a-checkbox v-model:checked="checked2" disabled />
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
return {
checked1: ref(false),
checked2: ref(false),
};
},
});
</script>
Checkbox.Group 内嵌 Checkbox 并与 Grid 组件一起使用,可以实现灵活的布局
<template>
<a-checkbox-group v-model:value="value">
<a-row>
<a-col :span="8">
<a-checkbox value="A">A</a-checkbox>
</a-col>
<a-col :span="8">
<a-checkbox value="B">B</a-checkbox>
</a-col>
<a-col :span="8">
<a-checkbox value="C">C</a-checkbox>
</a-col>
<a-col :span="8">
<a-checkbox value="D">D</a-checkbox>
</a-col>
<a-col :span="8">
<a-checkbox value="E">E</a-checkbox>
</a-col>
</a-row>
</a-checkbox-group>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
return {
value: ref([]),
};
},
});
</script>
API
属性
Checkbox
参数 | 说明 | 类型 | 默认值 | 版本 |
---|---|---|---|---|
autofocus | 自动获取焦点 | boolean | false | |
checked(v-model) | 指定当前是否选中 | boolean | false | |
disabled | 失效状态 | boolean | false | |
indeterminate | 设置 indeterminate 状态,只负责样式控制 | boolean | false |
事件
事件名称 | 说明 | 回调参数 | 版本 |
---|---|---|---|
change | 变化时回调函数 | Function(e:Event) | - |
Checkbox Group
参数 | 说明 | 类型 | 默认值 | 版本 |
---|---|---|---|---|
disabled | 整组失效 | boolean | false | |
name | CheckboxGroup 下所有 input[type=”checkbox”] 的 name 属性 | string | - | 1.5.0 |
options | 指定可选项,可以通过 slot=”label” slot-scope=”option” 定制label | string[] | Array<{ label: string value: string disabled?: boolean, indeterminate?: boolean, onChange?: function }> | [] | |
value(v-model) | 指定选中的选项 | string[] | [] |
事件
事件名称 | 说明 | 回调参数 | 版本 |
---|---|---|---|
change | 变化时回调函数 | Function(checkedValue) | - |
方法
Checkbox
名称 | 描述 | 版本 |
---|---|---|
blur() | 移除焦点 | |
focus() | 获取焦点 |