--- name: arco-vue-form description: "Arco Design Vue 表单 Form 组件参考。用于 Vue 3、`@arco-design/web-vue`、``、属性、事件、插槽、示例和实现细节。" user-invocable: false --- # 表单 Form ## 简介 表单的基本用法。 ## 基本用法 ```vue ``` ## API ### `
` 属性 |参数名|描述|类型|默认值|版本| |---|---|---|:---:|:---| |model **(必填)**|表单数据对象|`object`|`-`|| |layout|表单的布局方式,包括水平、垂直、多列|`'horizontal' \| 'vertical' \| 'inline'`|`'horizontal'`|| |size|表单控件的尺寸|`'mini' \| 'small' \| 'medium' \| 'large'`|`'medium'`|| |label-col-props|标签元素布局选项。参数同 `` 组件一致|`object`|` span: 5, offset: 0 `|| |wrapper-col-props|表单控件布局选项。参数同 `` 组件一致|`object`|` span: 19, offset: 0 `|| |label-align|标签的对齐方向|`'left' \| 'right'`|`'right'`|| |disabled|是否禁用表单|`boolean`|`-`|| |rules|表单项校验规则|`Record`|`-`|| |auto-label-width|是否开启自动标签宽度,仅在 `layout="horizontal"` 下生效。|`boolean`|`false`|2.13.0| |id|表单 `id` 属性和表单控件 `id` 前缀|`string`|`-`|| |scroll-to-first-error|验证失败后滚动到第一个错误字段|`boolean`|`false`|2.51.0| ### `` 事件 |事件名|描述|参数| |---|---|---| |submit|表单提交时触发|data: `{values: Record; errors: Record \| undefined}`
ev: `Event`| |submit-success|验证成功时触发|values: `Record`
ev: `Event`| |submit-failed|验证失败时触发|data: `{values: Record; errors: Record}`
ev: `Event`| ### `` 方法 |方法名|描述|参数|返回值|版本| |---|---|---|---|:---| |validate|校验全部表单数据|callback: `(errors: undefined \| Record) => void`|Promise>|| |validateField|校验部分表单数据|field: `string \| string[]`
callback: `(errors: undefined \| Record) => void`|Promise>|| |resetFields|重置表单数据|field: `string \| string[]`|-|| |clearValidate|清除校验状态|field: `string \| string[]`|-|| |setFields|设置表单项的值和状态|data: `Record`|-|| |scrollToField|滚动到指定表单项|field: `string`|-|2.51.0| ### `` 属性 |参数名|描述|类型|默认值|版本| |---|---|---|:---:|:---| |field|表单元素在数据对象中的path(数据项必填)|`string`|`''`|| |label|标签的文本|`string`|`-`|| |tooltip|提示内容|`string`|`-`|2.41.0| |show-colon|是否显示冒号|`boolean`|`false`|| |no-style|是否去除样式|`boolean`|`false`|| |disabled|是否禁用|`boolean`|`-`|| |help|帮助文案|`string`|`-`|| |extra|额外显示的文案|`string`|`-`|| |required|是否必须填写|`boolean`|`false`|| |asterisk-position|可选择将星号置于 label 前/后|`'start' \| 'end'`|`'start'`|2.41.0| |rules|表单项校验规则(优先级高于 form 的 rules)|`FieldRule \| FieldRule[]`|`-`|| |validate-status|校验状态|`'success' \| 'warning' \| 'error' \| 'validating'`|`-`|| > 仅列出常用项,低频属性按需查阅官方 API。 ### `` 插槽 |插槽名|描述|参数| |---|:---:|---| |label|标签|-| |help|帮助信息|-| |extra|额外内容|-| ### 类型定义 ### FieldRule |参数名|描述|类型|默认值| |---|---|---|:---:| |type|校验的值的类型,默认为 `'string'`|`'string' \| 'number' \| 'boolean' \| 'array' \| 'object' \| 'email' \| 'url' \| 'ip'`|`-`| |required|是否必填|`boolean`|`false`| |message|校验失败时展示的信息|`string`|`-`| |length|校验长度(string, array)|`number`|`-`| |maxLength|最大长度(string)|`number`|`-`| |minLength|最小长度(string)|`number`|`-`| |match|匹配校验(string)|`RegExp`|`-`| |uppercase|大写(string)|`boolean`|`false`| |lowercase|小写(string)|`boolean`|`false`| |min|最小值(number)|`number`|`-`| |max|最大值(number)|`number`|`-`| |equal|校验数值(number)|`number`|`-`| > 仅列出常用项,低频属性按需查阅官方 API。 ### FieldData |参数名|描述|类型|默认值| |---|---|---|:---:| |value|字段的值|`any`|`-`| |status|字段的状态|`ValidateStatus`|`-`| |message|字段的错误信息|`string`|`-`| ### ValidatedError |参数名|描述|类型|默认值|版本| |---|---|---|:---:|:---| |label|标签的文本|`string`|`-`|2.18.0| |field|字段名|`string`|`-`|| |value|字段值|`any`|`-`|| |type|字段类型|`string`|`-`|| |isRequiredError|是否为 `required` 错误|`boolean`|`false`|| |message|错误信息|`string`|`-`|| ### FormItemEventHandler |参数名|描述|类型|默认值| |---|---|---|:---:| |onChange|onChange|`(ev?: Event) => void`|`-`| |onInput|onInput|`(ev?: Event) => void`|`-`| |onFocus|onFocus|`(ev?: Event) => void`|`-`| |onBlur|onBlur|`(ev?: Event) => void`|`-`| ### useFormItem ```ts const useFormItem = (data: { size?: Ref; disabled?: Ref; error?: Ref; }) => { mergedSize:Ref; mergedDisabled:Ref; mergedError:Ref; feedback:Ref; eventHandlers:Ref; } ``` ## 常用模式 - **表单布局**:表单支持三种布局方式: `horizontal` - 水平排列 **(默认)**, `vertical` - 垂直排列, `inline` - 行内排列。 - **额外信息和帮助信息**:可以使用 `extra` 添加额外信息。如果需要在外部自定义校验信息,可以使用 `help` 属性或插槽。设置 `help` 时校验信息会被屏蔽。 - **嵌套数据**:展示了多种表单项嵌套的方式。表单项组件默认会将表单项状态和事件绑定到第一子组件,如果想要使用表单项进行布局设置,请设置 `:merge-props="false"` 以关闭绑定,或者使用函数指定需要绑定的数据。 - **栅格布局**:展示了使用栅格布局的方式。可以使用 `label-col-flex` 属性指定标签的具体宽度。 - **自动标签宽度**:设置 `auto-label-width` 开启自动标签宽度。仅在 `layout="horizontal"` 布局下生效。_* 目前仅在首次加载后生效。_ - **验证表单**:展示了表单校验的使用方法。 - **验证表单2**:展示了表单校验`rules`使用在`a-form`上的使用方法,以及可以直接校验`email`、`ip`、`url` - **自定义表单校验状态**:开启 `feedback` 可以让部分输入组件展示当前状态信息 ## 最佳实践 - 新代码优先使用 Vue 3、Composition API 和 `