Skip to content

FxForm 表单

具有数据收集、校验和提交功能的表单容器。配合 FxFormItem 组织字段,内置 async-validator 校验引擎,支持 blur/change 触发、行内/垂直布局、统一 size/disabled 透传、必填星号、校验状态图标。不依赖任何 UI 框架

基础用法

FxForm:model 绑定数据对象、:rules 绑定校验规则;FxFormItemprop 指向 model 的字段。formRef.validate() 触发全量校验,resetFields() 重置。

表单校验

配置 rules 后,控件在 blur/change 触发时自动校验;点击「立即创建」会执行全量校验。requiredmin/maxtype: arraytype: email 等内置规则覆盖常见场景。

自定义校验

当内置规则无法满足时,通过 validator(rule, value, callback) 自定义校验逻辑。本示例演示密码二次确认联动校验(输入新密码后自动触发确认项重校)和异步校验(年龄校验延迟 1s),并启用 status-icon 展示校验结果图标。

行内表单

设置 inline 后,所有 FxFormItem 横向排列,适合查询栏、过滤条等紧凑场景。

表单尺寸

size 透传到表单内所有接入 useFormItem 的控件(FxInput/FxSelect/FxInputNumber/FxCheckbox/FxRadio 等),统一切换 large/default/smalllabel-position 控制 label 位置。

数字类型校验

v-model.number 配合 type: 'number' 规则,可校验输入是否为数字;规则写在 FxFormItem:rules 上可针对单项配置。

无障碍

FxFormItemlabel 会自动关联到内部第一个控件;当一项内包含多个输入时(如姓名 + 姓氏),需在每个输入上单独设置 aria-label,placeholder 不能替代。

对齐方式

FxFormFxFormItem 均支持 label-position,可分别控制「表单整体对齐」与「单项对齐」,单项设置优先于表单设置。

动态增减表单项

通过 v-for 渲染动态字段,:propdomains.${index}.value 路径形式指向 model 的嵌套字段,:rules 在项上单独配置。新增/删除字段后表单值与校验状态自动同步。

局部引入

ts
import { FxForm, FxFormItem } from "@fx/components"
import type {
  FxFormInstance,
  FxFormItemInstance,
  FormRules,
  FormItemRule,
} from "@fx/components"

FxForm API

Attributes

名称说明类型默认值
model表单数据对象Record<string, any>
rules表单校验规则FormRules
label-positionlabel 位置'left' | 'right' | 'top'right
label-widthlabel 宽度(如 '80px',支持 'auto'string | number
label-suffixlabel 后缀string
require-asterisk-position必填星号位置'left' | 'right'left
hide-required-asterisk是否隐藏必填星号booleanfalse
inline是否行内表单booleanfalse
inline-message是否行内展示校验信息booleanfalse
status-icon是否展示校验结果图标booleanfalse
show-message是否展示错误信息booleantrue
validate-on-rule-changerules 变化是否触发校验booleantrue
scroll-to-error校验失败是否滚动到首个错误项booleanfalse
scroll-into-view-options滚动配置ScrollIntoViewOptions | booleantrue
size表单内组件尺寸'large' | 'default' | 'small'
disabled是否禁用表单内所有组件booleanfalse

Events

名称说明回调参数
validate任一字段校验完成时触发(prop, isValid, message)

Methods(ref)

名称说明
validate全量校验,返回 Promise<void>,失败时 reject
validate-field校验指定字段 (props?, callback?)
reset-fields重置表单(恢复初始值 + 清空校验)
clear-validate清空校验状态 (props?)
scroll-to-field滚动到指定字段 (prop)

Slots

名称说明
default表单项内容(FxFormItem

FxFormItem API

Attributes

名称说明类型默认值
propmodel 的字段键(支持路径数组,用于 validate/resetFieldstring | string[]
labellabel 文本string
label-widthlabel 宽度(覆盖 form)string | number
label-positionlabel 位置(覆盖 form)'left' | 'right' | 'top'
required是否必填(省略则由规则决定)boolean
rules该项校验规则FormItemRule | FormItemRule[]
error字段错误信息(设置后立即进入 error 态)string
validate-status校验状态'' | 'error' | 'validating' | 'success'
for等价原生 label 的 forstring
inline-message是否行内展示校验信息boolean
show-message是否展示错误信息booleantrue
size该项内组件尺寸'large' | 'default' | 'small'

Slots

名称说明作用域
default字段控件
label自定义 label{ label }
error自定义错误内容{ error }

Methods(ref)

名称说明
validate校验该项 (trigger, callback?)
reset-field重置该项
clear-validate清空该项校验状态

校验规则

rules 为配置式(async-validator),每个字段是规则数组:

ts
const rules: FormRules = {
  name: [
    { required: true, message: "请输入姓名", trigger: "blur" },
    { min: 2, max: 5, message: "长度 2-5 个字符", trigger: "blur" },
  ],
  age: [
    { required: true, message: "请输入年龄", trigger: "blur" },
    { type: "number", message: "必须为数字", trigger: "blur" },
  ],
}

常用规则字段:required / min / max / len / type / pattern / validator(自定义) / trigger('blur'|'change') / message

实现说明

  • 校验引擎async-validatorrules 配置式;FxFormItem 内用 Schema 实例校验,支持 blur/change 触发过滤与全量 validate
  • 字段接入:表单控件(FxInput/FxSelect/FxCheckbox/FxRadio/FxSwitch/FxSlider/FxInputNumber)通过 useFormItem 接入,blur/change 时上报校验,并透传 size/disabled、关联 label for
  • 嵌套字段prop 支持字符串路径数组(如 ['user', 'name']),rules 按嵌套结构提供。
  • 样式:走 @fx/styles token(--color-danger/--color-text-*/--fw-*/--radius-*),fx-form/fx-form-item BEM,亮暗自动跟随。
  • 校验图标:开启 status-icon 后,校验图标由受控控件(FxInput/FxSelect)在自身 suffix 内渲染(类名 fx-input__validate-icon);form-item 通过 feedback 态下发显隐信号,is-error 态下钻使受控控件 wrapper 边框变红。图标走 @fx-core/icon:成功 ep:circle-check、失败 ep:circle-close、校验中 ep:loading