Checkbox 多选框
在多个选项中进行多选。
基础用法
size
属性用来控制多选框的大小, 默认 small
。
vue
<template>
<div class="box">
<div class="box-item">
<dk-checkbox v-model="checked" size="large" label="option1(large)"></dk-checkbox>
<dk-checkbox size="medium" label="option2(medium)"></dk-checkbox>
<dk-checkbox size="small" label="option3(small)"></dk-checkbox>
<dk-checkbox size="mini" label="option4(mini)"></dk-checkbox>
</div>
<div class="box-item">
<dk-checkbox disabled label="option1"></dk-checkbox>
<dk-checkbox disabled label="option2"></dk-checkbox>
<dk-checkbox disabled label="option3"></dk-checkbox>
<dk-checkbox disabled label="option4"></dk-checkbox>
</div>
</div>
</template>
<script>
import { defineComponent, reactive, toRefs } from 'vue'
export default defineComponent({
name: 'checkbox',
setup() {
const data = reactive({
checked: true
})
return {
...toRefs(data)
}
}
})
</script>
展开
禁用状态
通过 disabled
属性来禁用多选框。
html
<template>
<dk-checkbox disabled label="已禁用"></dk-checkbox>
<dk-checkbox label="未禁用"></dk-checkbox>
</template>
展开
组合
dk-checkbox-group
用于多选框组,将多个 dk-checkbox
放在 dk-checkbox-group
中即可。
vue
<template>
<dk-checkbox-group v-model="checkList">
<dk-checkbox
v-for="item in checkList"
:key="item.value"
:label="item.label"
:value="item.value"
></dk-checkbox>
</dk-checkbox-group>
</template>
<script>
import { defineComponent, reactive, toRefs } from 'vue'
export default defineComponent({
name: 'checkbox',
setup() {
const data = reactive({
checkList: [
{ label: 'option1', value: '1' },
{ label: 'option2', value: '2' },
{ label: 'option3', value: '3' },
{ label: 'option4', value: '4' }
]
})
return {
...toRefs(data)
}
}
})
</script>
展开
中间状态
通过 indeterminate
属性来设置多选框的中间状态。
vue
<template>
<dk-checkbox
v-model="allCheck"
:indeterminate="isIndeterminate"
label="全选"
@change="handleAllCheckChange"
></dk-checkbox>
<dk-checkbox-group v-model="checkList" @change="handleGroupChange">
<dk-checkbox
v-for="item in checkList"
:key="item.value"
v-model="item.checked"
:label="item.label"
:value="item.value"
></dk-checkbox>
</dk-checkbox-group>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs } from 'vue'
export default defineComponent({
name: 'checkbox',
setup() {
const data = reactive({
allCheck: false,
isIndeterminate: true,
checkList: [
{ label: 'option1', value: '1', checked: false },
{ label: 'option2', value: '2', checked: false },
{ label: 'option3', value: '3', checked: false },
{ label: 'option4', value: '4', checked: false }
]
})
const methods = reactive({
handleAllCheckChange(val: boolean) {
data.checkList.forEach(item => {
item.checked = val
})
data.isIndeterminate = false
},
handleGroupChange(val: string[]) {
data.allCheck = val.length === data.checkList.length
data.isIndeterminate = val.length > 0 && val.length < data.checkList.length
},
getIndeterminate() {
const isChecked = data.checkList.find(item => item.checked)
if (isChecked !== undefined && data.allCheck === false) {
return true
}
return false
}
})
data.isIndeterminate = methods.getIndeterminate()
return {
...toRefs(data),
...toRefs(methods)
}
}
})
</script>
展开
选中数量限制
max
属性用来设置多选框的最大选中数量。
vue
<template>
<dk-checkbox-group v-model="checkList" :max="2">
<dk-checkbox
v-for="item in checkList"
:key="item.value"
:label="item.label"
:value="item.value"
></dk-checkbox>
</dk-checkbox-group>
</template>
<script>
import { defineComponent, reactive, toRefs } from 'vue'
export default defineComponent({
name: 'checkbox',
setup() {
const data = reactive({
checkList: [
{ label: 'option1', value: '1' },
{ label: 'option2', value: '2' },
{ label: 'option3', value: '3' },
{ label: 'option4', value: '4' }
]
})
return {
...toRefs(data)
}
}
})
</script>
展开
带有边框
通过 border
属性来设置多选框的边框。
vue
<template>
<dk-checkbox-group v-model="checkList" border>
<dk-checkbox
v-for="item in checkList"
:key="item.value"
:label="item.label"
:value="item.value"
border
></dk-checkbox>
</dk-checkbox-group>
</template>
<script>
import { defineComponent, reactive, toRefs } from 'vue'
export default defineComponent({
name: 'checkbox',
setup() {
const data = reactive({
checkList: [
{ label: 'option1', value: '1' },
{ label: 'option2', value: '2' },
{ label: 'option3', value: '3' },
{ label: 'option4', value: '4' }
]
})
return {
...toRefs(data)
}
}
})
</script>
展开
属性
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
v-model | 绑定值 | boolean | true false | - |
label | 多选框文案 | string | - | - |
value | 多选框的真实值(不设置默认为label ) | string | - | - |
size | 多选框的大小 | string | large medium small mini | small |
disabled | 是否禁用 | boolean | true false | false |
indeterminate | 是否为中间状态 | boolean | true false | false |
border | 是否带有边框 | boolean | true false | false |
事件
事件名称 | 说明 | 回调参数 |
---|---|---|
change | 绑定值变化时触发 | () => boolean |
插槽
插槽名称 | 说明 |
---|---|
default 默认插槽 | 多选框文案 |
checkbox-group 属性
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
max | 最大选中数量 | number | - | - |
v-model | 绑定值 | string[] | - | - |
checkbox-group 事件
事件名称 | 说明 | 回调参数 |
---|---|---|
change | 绑定值变化时触发 | (value: string[]) => void |