跳转到内容

表单 Form

通过异步的方法校验表单功能。

设置 auto-label-width 开启自动标签宽度。仅在 layout="horizontal" 布局下生效。 * 目前仅在首次加载后生效。

表单的基本用法。

通过 useFormItem 自定义表单组件。2.18.0 版本后可用。

通过 disabled 属性可以禁用整个表单。

通过数据动态控制表单内容。

可以使用 extra 添加额外信息。如果需要在外部自定义校验信息,可以使用 help 属性或插槽。设置 help 时校验信息会被屏蔽。

展示了使用栅格布局的方式。可以使用 label-col-flex 属性指定标签的具体宽度。

表单支持三种布局方式: horizontal - 水平排列 (默认)vertical - 垂直排列, inline - 行内排列。

展示了多种表单项嵌套的方式。表单项组件默认会将表单项状态和事件绑定到第一子组件,如果想要使用表单项进行布局设置,请设置 :merge-props="false" 以关闭绑定,或者使用函数指定需要绑定的数据。如果使用 grid 组件进行布局,请设置 :content-flex="false" 关闭表单项内容的 flex 布局。

展示了提交失败自动滚动到第一个错误字段和手动滚动对应字段的使用方法。

开启 feedback 可以让部分输入组件展示当前状态信息

展示了表单校验的使用方法。

展示了表单校验rules使用在sd-form上的使用方法,以及可以直接校验emailipurl

参数名描述类型默认值版本
model (必填)表单数据对象object-
layout表单的布局方式,包括水平、垂直、多列'horizontal' | 'vertical' | 'inline''horizontal'
size表单控件的尺寸'mini' | 'small' | 'medium' | 'large''medium'
label-col-props标签元素布局选项。参数同 <col> 组件一致objectspan: 5, offset: 0
wrapper-col-props表单控件布局选项。参数同 <col> 组件一致objectspan: 19, offset: 0
label-align标签的对齐方向'left' | 'right''right'
disabled是否禁用表单boolean-
rules表单项校验规则Record<string, FieldRule | FieldRule[]>-
auto-label-width是否开启自动标签宽度,仅在 layout="horizontal" 下生效。booleanfalse2.13.0
id表单 id 属性和表单控件 id 前缀string-
scroll-to-first-error验证失败后滚动到第一个错误字段booleanfalse2.51.0
事件名描述参数
submit表单提交时触发data: {values: Record<string, any>; errors: Record<string, ValidatedError> | undefined}
ev: Event
submit-success验证成功时触发values: Record<string, any>
ev: Event
submit-failed验证失败时触发data: {values: Record<string, any>; errors: Record<string, ValidatedError>}
ev: Event
方法名描述参数返回值版本
validate校验全部表单数据callback: (errors: undefined | Record<string, ValidatedError>) => voidPromise<undefined | Record<string, ValidatedError>>
validateField校验部分表单数据field: string | string[]
callback: (errors: undefined | Record<string, ValidatedError>) => void
Promise<undefined | Record<string, ValidatedError>>
resetFields重置表单数据field: string | string[]-
clearValidate清除校验状态field: string | string[]-
setFields设置表单项的值和状态data: Record<string, FieldData>-
scrollToField滚动到指定表单项field: string-2.51.0
参数名描述类型默认值版本
field表单元素在数据对象中的path(数据项必填)string''
label标签的文本string-
tooltip提示内容string-2.41.0
show-colon是否显示冒号booleanfalse
no-style是否去除样式booleanfalse
disabled是否禁用boolean-
help帮助文案string-
extra额外显示的文案string-
required是否必须填写booleanfalse
asterisk-position可选择将星号置于 label 前/后'start' | 'end''start'2.41.0
rules表单项校验规则(优先级高于 form 的 rules)FieldRule | FieldRule[]-
validate-status校验状态'success' | 'warning' | 'error' | 'validating'-
validate-trigger触发校验的事件'change' | 'input' | 'focus' | 'blur''change'
label-col-props标签元素布局选项。参数同 <col> 组件一致object-
wrapper-col-props表单控件布局选项。参数同 <col> 组件一致object-
hide-label是否隐藏标签booleanfalse
hide-asterisk是否隐藏星号booleanfalse
label-col-style标签元素布局组件的 styleobject-2.10.0
wrapper-col-style表单控件布局组件的 styleobject-2.10.0
row-props表单项布局选项。参数同 <row> 组件一致object-2.10.0
row-class表单项布局组件的 classstring|array|object-2.10.0
content-class表单控件包裹层的 classstring|array|object-2.10.0
content-flex内容层是否开启 flex 布局booleantrue2.13.0
merge-props(已废除)控制传递到子元素上的 Props。默认包括 disabled、error、size、 events 和 FormItem 上的额外属性。2.18.0 版本废除boolean | ((props: Record<string, any>) => Record<string, any>)true2.13.0
label-col-flex设置标签 Col 组件的 flex 属性。设置时表单 Col 组件的 flex 属性会被设置为 autonumber|string-2.13.0
feedback是否显示表单控件的反馈图标booleanfalse2.16.0
label-component表单项标签渲染的元素string'label'2.22.0
label-attrs表单项元素的属性object-2.22.0
插槽名描述参数
label标签-
help帮助信息-
extra额外内容-
参数名描述类型默认值
type校验的值的类型,默认为 'string''string' | 'number' | 'boolean' | 'array' | 'object' | 'email' | 'url' | 'ip'-
required是否必填booleanfalse
message校验失败时展示的信息string-
length校验长度(string, array)number-
maxLength最大长度(string)number-
minLength最小长度(string)number-
match匹配校验(string)RegExp-
uppercase大写(string)booleanfalse
lowercase小写(string)booleanfalse
min最小值(number)number-
max最大值(number)number-
equal校验数值(number)number-
positive正数(number)booleanfalse
negative负数(number)booleanfalse
true是否为 true(boolean)booleanfalse
false是否为 false(boolean)booleanfalse
includes数组中是否包含给定值(array)any[]-
deepEqual数组元素是否相等(array)any-
empty是否为空(object)booleanfalse
hasKeys对象是否包含给定属性(object)string[]-
validator自定义校验规则( value: FieldValue | undefined, callback: (error?: string) => void ) => void-
参数名描述类型默认值
value字段的值any-
status字段的状态ValidateStatus-
message字段的错误信息string-
参数名描述类型默认值版本
label标签的文本string-2.18.0
field字段名string-
value字段值any-
type字段类型string-
isRequiredError是否为 required 错误booleanfalse
message错误信息string-
参数名描述类型默认值
onChangeonChange(ev?: Event) => void-
onInputonInput(ev?: Event) => void-
onFocusonFocus(ev?: Event) => void-
onBluronBlur(ev?: Event) => void-
const useFormItem = (data: {
size?: Ref<Size | undefined>;
disabled?: Ref<boolean>;
error?: Ref<boolean>;
}) => {
mergedSize: Ref<Size>;
mergedDisabled: Ref<boolean>;
mergedError: Ref<boolean>;
feedback: Ref<string>;
eventHandlers: Ref<FormItemEventHandler>;
};

field 属性的值为获取当前 form-item 对应值的路径字符串。

例如传入 model 属性的数据结构为:

const data = reactive({
name: 'xiaoming',
people: [
{
id: '1111',
},
{
// bind this value
id: '2222',
},
],
});

此时,如果想要指定当前 form-item 对应的值为 id: '2222',需要设置 field="people.2.id",值中的分隔符需要使用 .。数组分割也可以使用 [],例如 field="people[2].id"

关于在 label 插槽中使用可点击元素

Section titled “关于在 label 插槽中使用可点击元素”

表单组件的标题区域默认使用 label 元素包裹,会在点击时激活输入组件,如果在其中放入可以点击组件,会影响其正常功能。此时可以使用 label-component 属性修改包裹元素为 span 解决这个问题。