Vue3里v-model和defineModel到底咋用?这些疑问一次讲透
文章标签
model;defineModel
做Vue项目时,双向数据绑定绕不开v-model,现在Vue3.4还推出defineModel语法糖,不少同学一头雾水:这俩啥关系?啥场景用更顺手?今天把常见疑问拆碎了唠明白。
Vue3的v-model基础逻辑是啥?和Vue2有啥不一样?
先回忆下双向绑定核心:父组件把值传给子组件,子组件改了值后通知父组件更新。
在Vue3里,组件上用v-model,默认等价于传递modelValue属性 + 触发update:modelValue事件,举个栗子:
父组件写 <Child v-model="parentVal" />,子组件得用 props: { modelValue: 类型 } 接收,再通过 emit('update:modelValue', 新值) 通知父组件更新。
而且Vue3支持多个v-model!<Child v-model:name="name" v-model:age="age" />,子组件对应接收name和age这两个props,触发update:name和update:age事件就行。
对比Vue2,差别可大了:
- Vue2里,组件用
v-model默认绑定value属性 +input事件(比如原生输入框);如果是自定义组件,得用.sync修饰符(如<Child :value.sync="val" />),本质是@update:value事件的语法糖。 - Vue3直接把
.sync整合到v-model里了,规则更统一:不管是表单元素还是自定义组件,v-model都基于modelValue和update:modelValue这套逻辑,多个绑定也能轻松搞定。
defineModel是干啥的?为啥Vue3.4+要搞这个语法糖?
简单说,defineModel是给组合式API(
code前端网