Form
FormProvider + FormLayout + form 标签的组合组件,可以帮助我们快速实现带回车提交的且能批量布局的表单
注意
component属性已经改名为tag并迁移至 FormLayout 组件上。
使用案例
<script>
import { createForm } from '@formily/core'
import {
Form,
FormButtonGroup,
FormItem,
Input,
Select,
Submit,
} from '@silver-formily/element-plus'
import { createSchemaField } from '@silver-formily/vue'
const form = createForm()
const fields = createSchemaField({ components: { Input, Select, FormItem } })
export default {
// eslint-disable-next-line vue/no-reserved-component-names
components: { FormButtonGroup, Submit, Form, ...fields },
data() {
return {
form,
}
},
methods: {
log(value) {
console.log(value)
return new Promise((resolve) => {
setTimeout(() => {
console.log('mock request success')
resolve(value)
}, 5000)
})
},
},
}
</script>
<template>
<Form
:form="form"
:label-col="6"
:wrapper-col="10"
@auto-submit="log"
@auto-submit-failed="log('failed')"
>
<SchemaField>
<SchemaStringField
name="input"
title="输入框"
x-decorator="FormItem"
x-component="Input"
:x-validator="[{ min: 5 }, { format: 'url' }]"
:required="true"
/>
<SchemaStringField
name="select"
title="选择框"
x-decorator="FormItem"
x-component="Select"
:x-validator="[{ min: 2 }]"
:enum="[
{ label: '选项一', value: 'one' },
{ label: '选项二', value: 'two' },
{ label: '选项三', value: 'three' },
]"
:required="true"
/>
</SchemaField>
<FormButtonGroup align-form-item>
<Submit>提交</Submit>
</FormButtonGroup>
</Form>
</template>查看源码
注意:想要实现回车提交,我们在使用 Submit 组件的时候不能给其传 submit 事件,否则回车提交会失效,这样做的目的是为了防止用户同时在多处写 submit 事件监听器,处理逻辑不一致的话,提交时很难定位问题。
API
属性主要继承自 FormLayout ,下面是 Form 组件额外的 API 属性
| 属性名 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| form | Form | Form 实例 | - |
| previewTextPlaceholder | string | 预览态占位符 | N/A |
| onAutoSubmit | (values:any)=>any | 回车提交事件回调 | - |
| onAutoSubmitFailed | (feedbacks) => void | 回车提交校验失败事件回调 | - |