Skip to content

Form 表单

由输入框、选择器、单选框、多选框等控件组成,用于收集、校验和提交数据。

基础用法

通过 model 绑定表单数据,rules 配置校验规则。

标签位置

通过 labelPosition 属性控制标签的位置:left(左对齐)、right(右对齐)、top(顶部对齐)。

行内表单

通过 inline 属性开启行内排列模式。

动态表单

通过 useFormArray / createFormArray 组合式函数管理动态字段列表,支持增删改移操作。每个表单项自动获得唯一 _key,确保 Vue 列表渲染高效稳定。

联动校验

validator 函数现在接收第三个参数 model,即完整的表单数据模型。这使得一个字段的校验可以引用其他字段的值。

异步校验与 Loading 状态

当 validator 返回 Promise 时,ZcFormItem 会自动展示旋转加载动画。validating 状态通过 FormItemContext 暴露给子组件。

Watch 模式

通过 validate-on-value-change 属性控制是否在值变化时自动校验(默认开启)。设为 false 可关闭实时校验,仅在提交时触发。

vue
<ZcForm :model="formData" :rules="rules" :validate-on-value-change="false">
  <ZcFormItem label="姓名" prop="name">
    <ZcInput v-model="formData.name" />
  </ZcFormItem>
</ZcForm>

useFormArray API

createFormArray / useFormArray 用于管理动态字段列表。

类型定义

ts
interface FormArrayOptions {
  /** 唯一键的属性名(默认 '_key') */
  keyField?: string
  /** 是否自动生成唯一键(默认 true) */
  autoKeys?: boolean
}

interface UseFormArrayReturn<T> {
  fields: Ref<FormArrayItem<T>[]> // 响应式数组
  add: (item?: Partial<T>) => void // 追加
  push: (item: Partial<T>) => void // 追加(别名)
  insert: (index: number, item: Partial<T>) => void // 插入
  remove: (index: number) => void // 删除
  move: (from: number, to: number) => void // 移动
  clear: () => void // 清空
  get: (index: number) => FormArrayItem<T> | undefined // 获取
  length: Ref<number> // 长度
  validate: () => Promise<boolean> // 校验
}

Form API

Form Props

参数说明类型默认值
model表单数据对象Record<string, unknown>
rules表单校验规则FormRules{}
labelWidth标签宽度string | number
labelPosition标签对齐方式left | right | topright
showMessage是否显示校验错误信息booleantrue
inline是否行内排列booleanfalse
validateOnValueChange是否在值变化时自动校验(Watch 模式)booleantrue
disabled表单级禁用状态booleanfalse

Form Events

事件名说明回调参数
validate任一表单项校验后触发(prop: string, success: boolean, message: string)

Form 方法

参数说明类型默认值
validate校验所有表单项,返回是否通过() => Promise<boolean>
validateField校验指定表单项(name: string) => Promise<boolean>
resetFields重置所有表单项校验状态() => void
clearValidate清除所有校验信息() => void

FormItem Props

参数说明类型默认值
prop字段路径(如 user.name)string
label标签文本string
labelWidth标签宽度覆盖string | number
rules自定义校验规则FormItemRule | FormItemRule[]
required是否必填(显示 * 号)booleanfalse
showMessage是否显示错误信息booleantrue
disabled是否禁用booleanfalse

FormItem Slots

插槽名说明
default表单项内容
label标签自定义内容
error校验错误信息自定义内容

FormItem 暴露的方法

参数说明类型默认值
validating是否正在异步校验中Ref<boolean>false

基于 MIT 许可发布