Form 表单
基于 Element Plus Form 增强的表单组件。
表单由input、 radio、 select、 checkbox等控件组成,用以收集、校验、提交数据。
TIP
该组件已升级为弹性布局(flex),替代了旧的浮动布局(float)。
基本用法
最基础的表单包括各种输入表单项,如input、 select、 radio、 checkbox等。
在每一个 Form 组件中,需要使用 bk-form-item 组件作为输入项的容器,也可通过 items 属性以配置化方式定义表单结构。每个表单项支持配置 prop、label 及相关字段属性等选项。
多列布局
当垂直空间受限且表单结构较简单时,可将表单项横向排列。
设置 col-num 属性指定表单布局的列数。
标签对齐方式
可根据设计需求,选择不同的标签对齐方式。
可在单个表单项中单独设置 label-position,若未设置,则继承 bk-form 的 label-position 配置。
label-position 属性用于设置标签对齐方式,可选值为 top 或 left。设置为 top 时,标签会显示在表单项的顶部。
表单校验
表单组件支持数据校验功能,帮助快速发现并修正输入错误。
只需为 bk-form 组件添加 rules 属性并传入校验规则,并将表单项的 prop 属性设置为需要验证的特殊键值即可。校验规则参见 async-validator。
自定义校验规则
本示例展示如何自定义校验规则,实现双密码一致性验证。
此处使用 status-icon 属性,通过图标直观展示校验结果。
提示
自定义校验的回调函数必须被调用,否则会导致校验流程卡死。高级用法参考 async-validator。
动态增减表单项
除了在表单组件上一次性传入所有校验规则外,也可针对单个表单项动态添加或删除校验规则。
数字类型校验
数字类型校验需要在输入框的 v-model 绑定上添加 .number 修饰符,该修饰符由 Vue 提供,用于将输入的字符串值转换为数字类型。
TIP
当一个表单项嵌套在另一个表单项中时,其标签宽度会被设为 0。如有需要,可在该嵌套的表单项上手动设置 label-width。
尺寸控制
表单内的所有组件会默认继承表单的 size 属性,表单项也单独提供 size 属性用于控制尺寸。
若不想让某个组件继承表单/表单项的尺寸,可单独为该组件设置 size 属性覆盖继承值。
无障碍访问
当表单项内仅包含单个输入控件(如输入框、选择器、复选框等)时,表单项的标签会自动关联到该输入控件。若包含多个输入控件,表单项会被赋予 WAI-ARIA 的 group 角色,此时需要开发者自行为每个输入控件添加辅助标签。
Form API
Form 属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| items | 表单项配置数组,每个项可指定类型、组件属性(componentProps)、子项等 | array | — |
| colNum | 多列表单布局的列数 | number | 1 |
Element Plus Form 原生属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| model | 表单数据对象 | object | — |
| rules | 表单校验规则 | object | — |
| inline | 是否行内表单(推荐使用 col-num 属性替代) | boolean | false |
| label-position | 标签的位置,可选值为 left / right / top,设置为 left 或 right 时,需同时设置 label-width | enum | right |
| label-width | 标签的宽度,例如 50px,支持 auto,所有直接子表单项会继承该值 | string / number | '' |
| label-suffix | 标签的后缀文本 | string | '' |
| hide-required-asterisk | 是否隐藏必填字段标签旁的红色星号 | boolean | false |
| require-asterisk-position | 星号的位置,可选值为 left / right | enum | left |
| show-message | 是否显示校验错误信息 | boolean | true |
| inline-message | 是否将校验错误信息以行内形式展示 | boolean | false |
| status-icon | 是否显示校验状态图标 | boolean | false |
| validate-on-rule-change | 是否在 rules 属性变化时触发校验 | boolean | true |
| size | 控制表单内组件的尺寸,可选值为 large / default / small | enum | — |
| disabled | 是否禁用表单内所有组件,设置为 true 时会覆盖内部组件的 disabled 属性 | boolean | false |
| scroll-to-error | 校验失败时,是否自动滚动到第一个错误表单项 | boolean | false |
| scroll-into-view-options | 校验失败滚动到错误项时,传递给 scrollIntoView 的配置项,参考 scrollIntoView | object / boolean | true |
FormItem
继承所有 Element Plus FormItemProps 属性,并新增以下增强功能:
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| type required | 表单项组件类型(例如:'input'、'select'、'radio') | string | — |
| componentProps | 传递给底层组件的额外属性 | object | — |
| children | 用于复杂布局的嵌套表单项配置 | array | — |
Form 事件
Element Plus Form 原生事件
| 事件名 | 说明 | 类型 |
|---|---|---|
| validate | 表单项校验触发的事件 | Function |
Form 插槽
Element Plus Form 原生插槽
| 插槽名 | 说明 | 子标签 |
|---|---|---|
| default | 自定义默认内容 | FormItem |
Form Exposes
Element Plus Form Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| validate | 校验整个表单,接收回调函数或返回 Promise | Function |
| validateField | 校验指定的表单项 | Function |
| resetFields | 重置指定的表单项,清除校验结果 | Function |
| scrollToField | 滚动到指定的表单项 | Function |
| clearValidate | 清除所有或指定表单项的校验提示 | Function |
| fields | 获取所有表单项的上下文 | array |
| getField | 获取指定表单项的上下文 | Function |
FormItem API
FormItem 属性
Element Plus FormItem 原生属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| prop | 表单模型字段,支持嵌套路径(如 a.b.0 或 ['a', 'b', '0']),在使用 validate / resetFields 方法时,该属性是必填的 | string / string[] | — |
| label | 标签文本 | string | — |
| label-position | 标签的位置,可选值为 left / right / top,设置为 left 或 right 时需指定 label-width,默认继承表单的 label-position | enum | '' |
| label-width | 标签的宽度,例如 50px,支持 auto | string / number | — |
| required | 是否为必填字段,若不设置,则由校验规则自动判断 | boolean | — |
| rules | 表单项的校验规则,参考 FormItemRule,高级用法参考 async-validator | object | — |
| error | 手动设置表单项的错误提示信息,设置后会立即触发校验错误状态并显示该信息 | string | — |
| show-message | 是否显示校验错误信息 | boolean | true |
| inline-message | 是否以行内形式展示校验错误信息 | boolean | false |
| size | 控制表单项内组件的尺寸,可选值为 large / default / small | enum | — |
| for | 原生 label 标签的 for 属性,用于关联表单控件 | string | — |
| validate-status | 表单项的校验状态,可选值为 error / validating / success / '' | enum | — |
FormItemRule
Element Plus FormItemRule 原生配置
| 名称 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| trigger | 校验触发方式 | enum | — |
提示
若不想通过输入事件触发校验,可在对应的输入类组件(<el-input>、<el-radio>、<el-select> 等)上设置 validate-event 为 false。
FormItem 插槽
Element Plus FormItem 原生插槽
| 插槽名 | 说明 | 类型 |
|---|---|---|
| default | 表单项的内容 | — |
| label | 自定义标签内容 | object |
| error | 自定义校验错误提示 | object |
FormItem Exposes
Element Plus FormItem Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| size | 表单项的尺寸 | object |
| validateMessage | 校验提示信息 | object |
| validateState | 校验状态 | object |
| validate | 校验当前表单项 | Function |
| resetField | 重置当前表单项,清除校验 | Function |
| clearValidate | 清除当前表单项的校验状态 | Function |