Vue 3自定义表单组件通过modelValue prop和update:modelValue事件实现v-model双向绑定;可直接用v-model="modelValue"简化输入框绑定;需格式化时用computed封装get/set;兼容Vue 2需同时声明value与modelValue并条件触发对应事件。

Vue 自定义表单组件使用 modelValue 接收父级值,本质是遵循 Vue 3 的 v-model 协议:父组件传入 modelValue 这个 prop,子组件通过它读取当前绑定值,并在用户操作时触发 update:modelValue 事件通知父组件更新。
基础写法:props + emit
子组件需显式声明接收 modelValue,并定义对应的更新事件:
- 用
defineProps声明modelValue(类型建议明确,如String、Number或Boolean) - 用
defineEmits声明update:modelValue事件 - 将
modelValue绑定到内部原生表单元素的:value或:checked等属性上 - 监听用户输入(如
@input、@change),调用emit('update:modelValue', newValue)
直接绑定原生 input(最简方式)
如果组件只封装一个 <input>,可跳过中间逻辑,直接把 modelValue 绑定过去:
Vue 会自动处理双向同步——读取时取 modelValue,修改时触发 update:modelValue。无需手动写 emit,也不用额外定义 props 和 emits,底层已封装好。
从零开始编排 SpringBoot+Vue 全栈项目工作流,适用于新建全栈项目或完整脚手架请求,触发后依次调用 product‑spec‑builder(需求调研)等模块。
立即学习“前端免费学习笔记(深入)”;
需要响应式计算或校验时用 computed
当你要对输入值做格式化、过滤或防错处理,推荐用 computed 包一层:
-
get返回modelValue -
set中先处理新值(比如转数字、截断空格),再emit('update:modelValue', processed)
这样既保持接口简洁,又能在子组件内控制数据流转逻辑。
兼容 Vue 2 的注意点(如需支持)
Vue 2 不识别 modelValue,默认用 value prop + input 事件。若需同时兼容,可在子组件中:
- 用
props: { value: ..., modelValue: ... }同时声明两个 prop(取其一有值的) - emit 时判断环境,分别触发
input或update:modelValue - 但更推荐按目标版本开发,避免混合逻辑增加维护成本

















