v-model
语法糖能够实现 Vue 中父组件与子组件之间的双向数据绑定。
很惊讶地发现在最近的 Vue 版本中又得到了更新,似乎变得好用了些。
Vue 3.4+
1 | <!-- Child.vue --> |
1 | <!-- Parent.vue --> |
使用宏 defineModel()
来产生一个双向绑定的变量。
如果是多个变量:
- 使用
defineModel('foo')
与defineModel('bar')
- 使用
v-model:foo="val1"
与v-model:bar="val2"
Vue 3
Vue3.4 以前的实现比较底层,当在父组件中使用 v-model
语法糖时,本质上是:
1 | <CustomComponent v-model="foo" /> |
所以在子组件实现时,需要手动绑定入参 prop 以及事件,手动写监听以及事件
1 | const value = computed({ |
Vue 2
Vue 2 中 v-model
的行为会有些不同:
1 | <CustomComponent v-model="foo" /> |
子组件的实现也会有点不同,主要还是变量名和事件的区别
1 | const value = computed({ |