Code前端首页关于Code前端联系我们

Vue3里v-model和defineModel到底咋用?这些疑问一次讲透

terry 2小时前 阅读数 39 #Vue
文章标签 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" />,子组件对应接收nameage这两个props,触发update:nameupdate:age事件就行。

对比Vue2,差别可大了:

  • Vue2里,组件用v-model默认绑定value属性 + input事件(比如原生输入框);如果是自定义组件,得用.sync修饰符(如<Child :value.sync="val" />),本质是@update:value事件的语法糖。
  • Vue3直接把.sync整合到v-model里了,规则更统一:不管是表单元素还是自定义组件,v-model都基于modelValueupdate:modelValue这套逻辑,多个绑定也能轻松搞定。

defineModel是干啥的?为啥Vue3.4+要搞这个语法糖?

简单说,defineModel是给组合式API(