实现表单控件包装的核心是支持 v-model 双向绑定,需接收 modelvalue prop 并触发 update:modelvalue 事件;适配 checkbox、radio 等多类型控件;集成 el-form 验证与重置能力。

实现表单控件的包装,核心是让自定义组件支持 v-model 双向绑定,并能复用 Element Plus 或 Ant Design 等 UI 库的底层控件。关键不在于重写输入逻辑,而在于正确桥接 props 与事件,保持语义清晰、行为一致。
明确 v-model 的工作方式
原生 <input v-model="value"> 实际等价于:<input :value="value">
Vue 3 中,自定义组件需遵循相同契约:
- 接收名为 modelValue 的 prop(代替旧版的
value) - 触发名为 update:modelValue 的事件,传入新值
- 模板中直接使用
v-model即可自动映射
封装一个带校验的输入框组件
以 BaseInput.vue 为例,基于 Element Plus 的 el-input:
- 在
<script setup></script>中声明modelValueprop 并定义 emit 函数 - 模板中将
modelValue绑定到el-input的v-model,同时监听change或blur触发校验逻辑 - 支持透传原生属性(如
placeholder、disabled)和 Element Plus 属性(如clearable、suffix-icon) - 通过
defineProps和defineEmits显式声明接口,增强类型安全
处理多类型表单项(checkbox / radio / select)
不同控件的绑定机制不同,封装时需按类型适配:
-
Checkbox(布尔型):prop 接收
modelValue: Boolean,触发update:modelValue时传入$event.target.checked -
Checkbox(数组型):prop 接收
modelValue: Array,触发时传入更新后的数组(增删当前 value) -
Radio / Select:直接绑定
v-model到子组件内部控件,value 变化即 emit 新值 - 统一使用
props.modelValue作为数据源,避免在组件内维护冗余 state
集成表单上下文与验证能力
单独控件需能嵌入 el-form 并响应规则:
- 接收
label、prop、rules等 prop,透传给外层el-form-item - 通过
inject获取父级el-form的validate方法或formItem实例,实现手动校验触发 - 内部错误提示可通过
errorprop 控制,或由父表单统一管理 - 重置时监听
resetFields事件,同步清空自身值
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










