Skip to content

表单 Form

用于收集信息。

基础使用

Form 用 model 传入表单数据对象,在 rules 中传入校验规则;FormItem 中 field 设置表单项字段,用于表单校验、重置等操作。

FormItem 的 rule 会覆盖 Form 的 rules 中相同 field 的规则定义。

当通过 Form 组件的 validate 方法手动触发表单校验时,组件将忽略 rulesrule 上配置的 trigger 条件,对所有存在的 FormItem 执行校验,并在遇到第一条不满足的规则时立即返回校验结果。

此外,需要注意的是,FormItem 的 field 不具有响应式。

Please select...
隐藏源代码

Hook 语法

useForm 会返回一个用于操作表单的对象,传入 Form 的 form 中即可。

Form 的 modelform 属性必须传入其一。

隐藏源代码

自定义校验

使用 validator 自定义表单校验条件。

The Answer to the Great Question Of Life, the Universe and Everything...

隐藏源代码

禁用 & 只读

通过 disabled 设置表单禁用状态,通过 readonly 设置表单只读状态。

表单组件 Form 的 disabledreadonly 属性会作用于其内部的所有按钮组件(包括 Button、ButtonGroup)以及各个 FormItem 内部的数据输入组件;而单个 FormItem 的 disabledreadonly 属性则仅影响该表单项内部的按钮组件和数据输入组件。

Form、FormItem 和其内部的按钮组和数据输入组件,这两个属性采用"或"逻辑,即任一被设为禁用或只读状态,其子树组件(或其自身)便会相应生效。

Disabled

Readonly

隐藏源代码

标签对齐

通过 labelAlign 设置标签对齐方向

隐藏源代码

子元素宽度

通过 labelPropscontentProps 修改标签和内容区域的 Col 组件属性。

设置 labelAutoWidth 标签区域宽度会进行自适应,内容区域宽度也会一同变化。

隐藏源代码

表单尺寸

表单有不同的大小。

表单组件 Form 的 size 属性会作用于其内部的所有按钮组件(包括 Button、ButtonGroup)以及各个 FormItem 内部的数据输入组件。

Form、FormItem 内部的按钮组和数据输入组件,size 属性如果没有传入或为 undefined,则设置为与 Form 的 size 属性相同,如果设置,则传入的值优先。

隐藏源代码

API

useForm

ts
function useForm<T extends Record<string | number, any> = Record<string | number, any>>(options?: {
    initialValues?: T;
}): UseFormReturn<T>

export interface UseFormReturn<
	T extends Record<string | number, any> = Record<string | number, any>
> {
	model: Ref<T>
	validate: (field?: string | string[]) => FormValidateResult
	reset: (field?: string | string[]) => void
	clearValidation: (field?: string | string[]) => void
	register: (registerOptions: UseFormRegisterOptions) => void
}

FormProps

属性类型可选默认值描述版本
modelRecord<number | string, any>表单数据对象。formmodel 必须传入其一。0.0.3
formFormInstanceuseForm 返回的表单对象,用于以 hook 的形式操作表单。formmodel 必须传入其一。0.0.3
rulesRecord<string, RuleItem | RuleItem[]>验证规则。0.0.3
enterSubmitbooleanfalse是否允许回车提交表单。0.2.0
disabledbooleanfalse是否禁用。0.0.3
readonlybooleanfalse是否只读。0.0.3
size'small' | 'medium' | 'large''medium'表单尺寸。0.0.3
labelAlign'left' | 'right' | 'top''right'标签的对齐方式。0.0.3
showAsteriskboolean是否展示星号。0.0.3
asteriskPlacement'left' | 'right' | 'end''left'星号的位置。0.0.3
labelAutoWidthbooleanfalse表单项标签宽度自适应。0.0.3
rowPropsRowProps & RestAttrs表单项行容器的属性。0.0.3
labelPropsColProps & RestAttrs表单项标签列的属性。0.0.3
contentPropsColProps & RestAttrs表单项内容列的属性。0.0.3
pollSizeChangebooleanfalse开启轮询组件尺寸变化,会影响子树上组件的按钮组件和数据输入组件的同名属性。0.1.0

UseFormReturn

属性类型可选默认值描述版本
modelRef<Record<string | number, any>>表单数据对象。0.0.3
validate(field?: string | string[]) => FormValidateResult手动触发表单验证,无参数时验证所有字段,Form 挂载后方可调用。0.0.3
reset(field?: string | string[]) => void手动触发表单重置,无参数时验证所有字段,Form 挂载后方可调用。0.0.3
clearValidation(field?: string | string[]) => void清除表单验证状态,无参数时清除所有字段,Form 挂载后方可调用。0.0.3

FormEvents

事件参数描述版本
submitform: Record<number | string, any>, event: SubmitEvent表单触发原生的提交时的回调。0.0.3
resetform: Record<number | string, any>, event: Event表单触发原生的重置时触发的回调。0.0.3

FormSlots

插槽参数描述版本
default用于渲染表单项。0.0.3

FormExpose

属性类型可选默认值描述版本
validate(field?: string | string[]) => FormValidateResult手动触发表单验证,无参数时验证所有字段。0.0.3
reset(field?: string | string[]) => void手动触发表单重置,无参数时重置所有字段。0.0.3
clearValidation(field?: string | string[]) => void清除表单验证状态,无参数时清除所有字段。0.0.3

RuleItem

属性类型可选默认值描述版本
requiredbooleanfalse是否为必填字段。0.0.3
messagestring验证失败时的提示信息,为空字符串时不会触发错误。0.0.3
triggerRuleTrigger | RuleTrigger[]['change', 'blur']触发验证的事件。0.0.3
typeFieldType | FieldType[]字段类型校验。0.0.3
maxnumber最大值限制,仅对数字值有效。0.0.3
minnumber最小值限制,仅对数字值有效。0.0.3
maxLengthnumber最大长度限制,仅当值为字符串或数组时有效。0.0.3
minLengthnumber最小长度限制,仅当值为字符串或数组时有效。0.0.3
emailbooleanfalse是否为邮箱地址,仅当值为字符串时有效。0.0.3
urlbooleanfalse是否为 URL,仅当值为字符串时有效。0.0.3
numberStringbooleanfalse是否为数字字符串,仅当值为字符串时有效。0.0.3
levelRuleLevel'error'验证失败的级别,只有 'error' 等级才会使表单校验失败。0.0.3
validator(value: any, model: Record<number | string, any>) => string | void | Promise<void | string>自定义验证函数,返回错误提示字符串,返回空值则为校验成功。0.0.3

FormItemProps

属性类型可选默认值描述版本
fieldstring关联的表单字段名,支持字段路径的形式,例如 'user[0].info.name'。该属性不具有响应式。0.0.3
labelstring标签文本。0.0.3
ruleRuleItem | RuleItem[]验证规则。0.0.3
disabledboolean是否禁用,和 Form 中的 disabled 取或运算决定最终是否禁用。0.0.3
readonlyboolean是否只读,和 Form 中的 readonly 取或运算决定最终是否只读。0.0.3
labelAlign'left' | 'right' | 'top'标签的对齐方式。0.0.3
showAsteriskboolean是否展示星号。0.0.3
asteriskPlacement'left' | 'right' | 'end'星号的位置。0.0.3
rowPropsRowProps & RestAttrs表单项行容器的属性。0.0.3
labelPropsColProps & RestAttrs表单项标签列的属性。0.0.3
contentPropsColProps & RestAttrs表单项内容列的属性。0.0.3
pollSizeChangebooleanfalse开启轮询组件尺寸变化,会影响子树上组件的按钮组件和数据输入组件的同名属性。0.1.0

FormItemSlots

插槽参数描述版本
tipmessage: string, level: RuleLevel验证提示。0.0.3
extra额外内容插槽,位于内容区域下方。0.0.3
label自定义标签。0.0.3
default表单项内容插槽。0.0.3

RuleLevel, FieldType, RuleTrigger, FormValidateResult

ts
export type RuleLevel = 'error' | 'warning' | 'success' | 'normal'
export type FieldType = 'number' | 'string' | 'boolean' | 'array' | 'dict' | 'function' | 'date'
export type RuleTrigger = 'blur' | 'change' | 'input'

export type FormValidateResult = Promise<{
	isValid: boolean
	results: Record<
		string,
		PromiseSettledResult<{
			message: string
			level: RuleLevel
		}>
	>
}>

RestAttrs

ts
import type { StyleValue } from 'vue'

export type VueClassValue = string | Record<string, any> | VueClassValue[]
export type VueStyleValue = StyleValue

export type RestAttrs = {
	style?: VueStyleValue | null
	class?: VueClassValue | null
	[x: string]: any
}