Skip to content

Form 表单 ​

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

基础用法 ​

请选择
vue
<my-form :model="form" label-width="80px">
  <my-form-item label="用户名">
    <my-input v-model="form.username" />
  </my-form-item>
  <my-form-item>
    <my-button type="primary" native-type="submit">提交</my-button>
  </my-form-item>
</my-form>

行内表单 ​

inline 使表单项水平排列。

vue
<my-form :model="form" inline>
  <my-form-item label="姓名"><my-input v-model="form.name" /></my-form-item>
  <my-form-item label="邮箱"><my-input v-model="form.email" /></my-form-item>
  <my-form-item><my-button type="primary">查询</my-button></my-form-item>
</my-form>

对齐方式 ​

align 控制表单水平对齐:left、center、right。

vue
<my-form :model="form" align="left" />
<my-form :model="form" align="center" />
<my-form :model="form" align="right" />

居中表单 ​

centered 使表单水平居中并限制最大宽度。

vue
<my-form :model="form" centered label-width="80px">
  <my-form-item label="用户名"><my-input v-model="form.username" /></my-form-item>
  <my-form-item label="密码"><my-input v-model="form.password" type="password" /></my-form-item>
</my-form>

表单校验 ​

通过 rules 配置验证规则,ref 调用 validate() 方法触发校验。支持 required、min、max、pattern。

vue
<my-form ref="formRef" :model="form" :rules="rules">
  <my-form-item prop="name" label="姓名">
    <my-input v-model="form.name" />
  </my-form-item>
</my-form>

<script setup>
const rules = {
  name: [
    { required: true, message: '请输入姓名', trigger: 'blur' },
    { min: 2, max: 10, message: '2-10个字符', trigger: 'blur' },
  ],
}
// 调用校验
formRef.value.validate().then(valid => { ... })
</script>

自定义校验规则 ​

validator 函数接收值和回调,适用于跨字段校验、异步校验等场景。

vue
const rules = {
  password2: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { min: 6, message: '密码至少6位', trigger: 'blur' },
  ],
  password3: [
    { required: true, message: '请确认密码', trigger: 'blur' },
    {
      validator: (val, cb) => {
        if (val !== form.password2) cb('两次密码不一致')
        else cb()
      },
      trigger: 'blur',
    },
  ],
}

动态表单项 ​

通过数组操作动态添加/删除表单项。

vue
<div v-for="(item, idx) in form.items" :key="idx">
  <my-form-item :label="'键 ' + (idx + 1)">
    <my-input v-model="item.key" />
  </my-form-item>
  <my-button @click="removeItem(idx)">删除</my-button>
</div>
<my-button @click="addItem">+ 添加一项</my-button>

数字类型验证 ​

rule 设置 type: 'number',min / max 按数值(而非字符串长度)比较。

ts
const rules = {
  quantity: [
    { type: 'number', required: true, message: '请输入数量' },
    { type: 'number', min: 1, max: 9999, message: '数量1-9999' },
  ],
  price: [
    { type: 'number', required: true, message: '请输入价格' },
    { type: 'number', min: 0.01, message: '价格不能小于0.01' },
  ],
}

尺寸控制 ​

size 控制标签字体大小:large、default、small。

vue
<my-form :model="form" size="large">
  <my-form-item label="大尺寸"><my-input /></my-form-item>
</my-form>
<my-form :model="form">
  <my-form-item label="默认尺寸"><my-input /></my-form-item>
</my-form>
<my-form :model="form" size="small">
  <my-form-item label="小尺寸"><my-input /></my-form-item>
</my-form>

标签位置 ​

label-position 设为 top 将标签放在输入框上方。

vue
<my-form :model="form" label-position="top">
  <my-form-item label="用户名"><my-input /></my-form-item>
</my-form>

组件结构 ​

<form> 根元素通过默认插槽包含若干个 <my-form-item> 组件。每个 form-item 由 <label> 标签、<div> 内容区(含默认插槽和错误信息 <p>)组成。

CSS 类名 ​

类名说明
.my-form根元素
.my-form--inline行内模式
.my-form--label-top标签顶部对齐
.my-form--label-left标签左对齐
.my-form--label-right标签右对齐
.my-form--align-left水平左对齐
.my-form--align-center水平居中对齐
.my-form--align-right水平右对齐
.my-form--centered居中表单
.my-form--large大尺寸
.my-form--small小尺寸
.my-form-item表单项
.my-form-item--error校验错误状态
.my-form-item__label标签
.my-form-item__required必填星号
.my-form-item__content内容区域
.my-form-item__error错误信息

API ​

Form Props ​

属性说明类型默认值
model表单数据对象Record<string, any>{}
rules校验规则Record<string, FormRule | FormRule[]>{}
labelWidth标签宽度string—
labelPosition标签位置'left' | 'right' | 'top''right'
size控件尺寸'large' | 'default' | 'small''default'
inline行内表单booleanfalse
align水平对齐'left' | 'center' | 'right''left'
centered居中表单(限制最大宽度)booleanfalse
disabled禁用所有表单项booleanfalse
ariaLabel无障碍标签string'表单'

Form Methods ​

方法说明参数
validate校验所有字段,返回 Promise—
clearValidate清除所有校验错误—
resetFields重置所有字段并清空校验—

Form Events ​

事件说明回调
submit表单提交(model, valid: boolean)

FormItem Props ​

属性说明类型默认值
prop字段名(对应 model 中的 key)string—
label标签文字string—
required是否必填(显示红色星号)booleanfalse
rules校验规则(优先级高于 form rules)FormRule | FormRule[]—
labelWidth标签宽度(覆盖 form 设置)string—
showMessage是否显示校验错误信息booleantrue

FormRule ​

属性说明类型默认值
required必填boolean—
message错误提示文字string—
trigger触发时机'change' | 'blur' | 'submit''submit'
type值类型'string' | 'number''string'
min最小长度/最小值number—
max最大长度/最大值number—
pattern正则匹配RegExp—
validator自定义校验函数(value, callback) => void—