Checkbox
复选框
提示
本组件做了对低版本element-plus的兼容处理,即无论你在使用哪个版本的element-plus,不使用插槽时dataSource中的对象都应包含label和value(但在低版本时使用插槽渲染还是要使用label属性来作为value)。
Markup Schema 案例
vue
<script lang="ts" setup>
import { createForm } from '@formily/core'
import { createSchemaField } from '@formily/vue'
import { Checkbox, Form, FormItem, Submit } from '@silver-formily/element-plus'
const form = createForm({
initialValues: {
single: true,
multiple: [1],
},
})
const { SchemaField, SchemaBooleanField, SchemaArrayField } = createSchemaField(
{
components: {
FormItem,
Checkbox,
},
},
)
async function onSubmit(value) {
console.log(value)
}
</script>
<template>
<Form :form="form">
<SchemaField>
<SchemaBooleanField
name="single"
title="是否确认"
x-decorator="FormItem"
x-component="Checkbox"
/>
<SchemaArrayField
name="multiple"
title="复选"
:enum="[
{ label: '选项1', value: 1 },
{ label: '选项2', value: 2 },
]"
x-decorator="FormItem"
x-component="Checkbox.Group"
/>
</SchemaField>
<Submit @submit="onSubmit">
提交
</Submit>
</Form>
</template>Markup Schema 使用插槽案例
vue
<script lang="ts" setup>
import { createForm } from '@formily/core'
import { createSchemaField } from '@formily/vue'
import { Checkbox, Form, FormItem, Submit } from '@silver-formily/element-plus'
import { Fragment, h } from 'vue'
const form = createForm()
const { SchemaField, SchemaBooleanField, SchemaArrayField } = createSchemaField(
{
components: {
FormItem,
Checkbox,
},
},
)
async function onSubmit(value) {
console.log(value)
}
</script>
<template>
<Form :form="form">
<SchemaField>
<SchemaBooleanField
name="single"
title="是否确认"
x-decorator="FormItem"
x-component="Checkbox"
/>
<SchemaArrayField
name="multiple"
title="复选"
:enum="[
{ label: '选项1', value: 1 },
{ label: '选项2', value: 2 },
]"
x-decorator="FormItem"
x-component="Checkbox.Group"
:x-content="{
option: (props, { attrs }) => {
return h(Fragment, [`使用插槽渲染的${attrs.option.label}`])
},
}"
/>
</SchemaField>
<Submit @submit="onSubmit">
提交
</Submit>
</Form>
</template>JSON Schema 案例
vue
<script lang="ts" setup>
import { createForm } from '@formily/core'
import { createSchemaField } from '@formily/vue'
import { Checkbox, Form, FormItem, Submit } from '@silver-formily/element-plus'
const schema = {
type: 'object',
properties: {
checkbox: {
'type': 'number',
'title': '是否确认',
'x-decorator': 'FormItem',
'x-component': 'Checkbox',
},
checkboxGroup: {
'type': 'array',
'title': '复选',
'x-decorator': 'FormItem',
'x-component': 'Checkbox.Group',
'enum': [
{
label: '选项1',
value: 1,
},
{
label: '选项2',
value: 2,
},
],
},
},
}
const form = createForm()
const { SchemaField } = createSchemaField({
components: {
FormItem,
Checkbox,
},
})
async function onSubmit(value) {
console.log(value)
}
</script>
<template>
<Form :form="form">
<SchemaField :schema="schema" />
<Submit @submit="onSubmit">
提交
</Submit>
</Form>
</template>Template 案例
vue
<script lang="ts" setup>
import { createForm } from '@formily/core'
import { ArrayField, Field } from '@formily/vue'
import { Checkbox, Form, FormItem, Submit } from '@silver-formily/element-plus'
const form = createForm()
async function onSubmit(value) {
console.log(value)
}
</script>
<template>
<Form :form="form">
<Field
name="single"
title="是否确认"
:decorator="[FormItem]"
:component="[Checkbox]"
/>
<ArrayField
name="multiple"
title="复选"
:data-source="[
{ label: '选项1', value: 1 },
{ label: '选项2', value: 2 },
]"
:decorator="[FormItem]"
:component="[Checkbox.Group, { optionType: 'button' }]"
/>
<ArrayField
name="multiple-slot"
title="使用插槽的复选"
:data-source="[
{ label: '选项1', value: 1 },
{ label: '选项2', value: 2 },
]"
:decorator="[FormItem]"
:component="[Checkbox.Group, { optionType: 'button' }]"
>
<template #option="{ option }">
<div>通过插槽渲染的{{ option.label }}</div>
</template>
</ArrayField>
<Submit @submit="onSubmit">
提交
</Submit>
</Form>
</template>API
参考 https://cn.element-plus.org/zh-CN/component/checkbox.html
扩展属性
| 属性名 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| optionType | enum | 样式类型 | 'default' |
Checkbox Slot
| 插槽名 | 说明 | 类型 |
|---|---|---|
| option | 自定义每个选项渲染方式的作用域插槽 | object |