vue 3动态表单核心是用结合配置驱动,通过type字段映射组件、showwhen控制显隐、colspan/rowbreak支持布局、rules动态注入校验。

Vue 3 中动态表单渲染不同类型的控件,核心是用 <component :is></component> 结合配置驱动逻辑,而不是为每种字段手写模板。关键不在于“能不能”,而在于“怎么组织配置、怎么映射组件、怎么处理联动和验证”。
用 type 字段决定渲染哪个组件
每个表单项在 JSON 配置里声明 type(如 "input"、"select"、"date-picker"、"rating"),渲染器遍历配置,用 <component :is="getComponent(field.type)"></component> 动态挂载对应 UI 组件。
- 基础映射示例:
{ input: ElInput, select: ElSelect, 'date-picker': ElDatePicker, rating: ElRate } - 支持自定义组件:比如评分题可配
range: [1, 5],渲染时传给ElRate的max属性 - 避免硬编码判断:封装
getComponent()函数,统一管理类型与组件的映射关系,便于后续扩展新控件
通过 v-if 控制条件性字段显隐
当某字段是否出现取决于其他字段值(例如:选了“是否开票”= 是,才显示发票抬头),不能只靠 :is,必须配合 v-if 做运行时判断。
- 配置中加
showWhen字段,如{"field": "invoiceTitle", "op": "==", "value": true} - 渲染时用计算属性或函数解析该条件,返回布尔值控制整个
<el-form-item></el-form-item>的显示 - 注意:v-if 触发组件销毁重建,适合强依赖场景;若只是禁用/隐藏,可用
:disabled或 CSS 控制
支持嵌套结构与多列布局
真实业务中表单常需分组、分栏、合并单元格。单纯线性渲染不够,要借助 Element Plus 的栅格系统增强灵活性。
- 配置中为每个字段指定
colSpan(占几格)、rowBreak(是否换行)、group(所属分组名) - 外层用
<el-row></el-row>,内层循环<el-col :span="field.colSpan"></el-col>,自动折行 - 分组用
<el-collapse></el-collapse>或自定义标题区块,配置中带groupTitle和isGroupHeader标识
校验规则随字段动态注入
每个字段的验证不应写死在组件内部,而应从配置中提取规则,再绑定到 el-form-item 的 rules 上。
- 配置示例:
{"required": true, "pattern": "^\d{11}$", "message": "请输入11位手机号"} - 生成 rules 数组时,把 required 转成
{ required: true, message: 'xxx' },pattern 转成{ pattern: /xxx/, message: 'xxx' } - 异步校验(如用户名是否已存在)可通过
validator函数注入,函数从配置中取 API 地址和参数
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










