FormItem 表单单项组件
PlusForm 组件的每一项。
注意
表单v-model
绑定的值尽量使用 ref 定义绑定的值,以避免 reactive 带来的响应式丢失问题。 参考 reactive 的局限性
基础用法
设置 valueType
控制表单的类型。
异步(动态)数据用法
PlusColumn 配置中的 options
支持数组, computed,函数和 Promise。
自定义表单项 (插槽)
注意
插槽 的优先级低于 renderField,高于 valueType。
PlusFormItem
组件会自动根据配置项的 prop
生成对应的插槽,例如下面的配置项,则会自动生成两个名称叫做 [ plus-field-name
]和 [ plus-field-status
] 的两个插槽,插槽的生成规则就是 固定 key 值 [ plus-field- ] 然后加上 配置项的 prop
。
<!-- 自动生成对应的插槽 'plus-field-name' -->
<PlusFormItem label="自定义" prop="name">
<template #plus-field-name>
<el-input placeholder="自定义输入框插槽" />
</template>
</PlusFormItem>
<!-- 自动生成对应的插槽 'plus-field-status' -->
<PlusFormItem label="自定义" prop="name">
<template #plus-field-status>
<el-input placeholder="自定义输入框插槽" />
</template>
</PlusFormItem>
自定义表单项 (renderField)
注意
renderField 的优先级高于插槽。
自定义表单项的核心方法是定义 renderField
方法, renderField
方法需要调用 vue 的渲染函数 h 返回一个 VNode
提示
renderField 返回的值
的props
和配置项的fieldProps
会同时生效,renderField 返回的值
的props
优先级高于 fieldProps
.
自定义表单项 (jsx/tsx)
注意
jsx/tsx 的使用需要将 vue 单文件组件的script
的属性 lang
设置为jsx
或者tsx
,jsx
中值使用单花括号{}
绑定。
<script lang="tsx" setup></script>
jsx/tsx
的支持本质是jsx/tsx
解析出来是VNode
, 使用 renderField 函数自定义表单项。
自定义表单 label (插槽)
注意
插槽 的优先级低于 renderLabel,高于 label。
PlusFormItem
组件会自动根据配置项的 prop
生成对应的插槽,例如下面的配置项,则会自动生成两个名称叫做 [ plus-label-name
]和 [ plus-label-status
] 的两个插槽,插槽的生成规则就是 固定 key 值 [ plus-label- ] 然后加上 配置项的 prop
。
<!-- 自动生成对应的插槽 'plus-label-name' -->
<PlusFormItem label="自定义" prop="name">
<template #plus-label-name>
<el-input placeholder="自定义输入框插槽" />
</template>
</PlusFormItem>
<!-- 自动生成对应的插槽 'plus-label-status' -->
<PlusFormItem label="自定义" prop="name">
<template #plus-label-status>
<el-input placeholder="自定义输入框插槽" />
</template>
</PlusFormItem>
自定义表单 label (renderLabel)
注意
renderLabel 的优先级高于插槽。
自定义表单项的核心方法是定义 renderLabel
方法, renderLabel
方法需要调用 vue 的渲染函数 h 返回一个 VNode
自定义表单 label (jsx/tsx)
注意
jsx/tsx 的使用需要将 vue 单文件组件的script
的属性 lang
设置为jsx
或者tsx
,jsx
中值使用单花括号{}
绑定。
<script lang="tsx" setup></script>
jsx/tsx
的支持本质是jsx/tsx
解析出来是VNode
, 使用 renderField 函数自定义表单项。
所有支持的类型
FormItem API
FormItem Attributes
名称 | 说明 | 类型 | 默认值 | 是否必须 |
---|---|---|---|---|
model-value / v-model | 表单绑定值 (尽量使用 ref 定义绑定的值,以避免 reactive 带来的响应式丢失问题) | object FieldValues | 否 | |
label | el-form-item 的 label | string | 是 | |
prop | el-input 等所有表单项的双向绑定的值; | string | 是 | |
valueType | 值的类型 | string FormItemValueType | 否 | |
options | el-select,el-radio-group,el-checkbox-group 选项 ,支持数组,函数,和 Promise | array/function/promise OptionsType | 否 | |
tooltip | 展示一个 icon,hover 时展示一些提示信息 | string / (object ElTooltipProps ) | 否 | |
renderField | 自定义渲染 el-form-item 下的 field-item 组件,自定义渲染同步表单的值的核心方法是调用 onChange 回调把值传给表单 | function | 否 | |
formItemProps | 传递给 el-form-item 的配置,支持所有 el-form-item 的 props。值支持对象 object,computed,函数和 Promise。 | object/function/promise PropsItemType | 否 | |
fieldProps | 传递给具体表单项和表格显示的配置,如 el-input,el-select 的 props。 值支持对象 object,computed,函数和 Promise。 | object/function/promise PropsItemType | 否 | |
renderLabel | 自定义渲染 el-form-item 下 label 行显示内容 | function | 否 |
FormItem Slots
插槽名 | 说明 | 作用域插槽参数 |
---|---|---|
plus-field-* | 自定义表单项,组件会自动根据配置项的 prop 生成对应的插槽 | {prop,label,fieldProps,valueType,column} |
plus-label-* | 自定义表单项 label,组件会自动根据配置项的 prop 生成对应的插槽 | {prop,label,fieldProps,valueType,column} |
Exposes
名称 | 说明 | 类型 |
---|---|---|
formItemInstance | el-form-tem 实例 | object |
fieldInstance | 具体的表单单项实例 如 el-input | object |