问题场景
父子组件通信时,我这里需要进行数据双向绑定(双向通信),正常父组件传向子组件数据是单向的,有时候需求需要双向的,然后我使用了v-model来实现双向绑定,父组件v-model子组件,子组件通过props接收,并在需要修改时触发update:X事件更新父组件值,从而实现双向绑定;看着没什么问题的操作,但是报错了,报错信息是:
翻译一下是:在使用v-model时不能使用prop,因为本地绑定的prop是不可写的;
让使用v-bind绑定,然后用自定义事件监听更改值,通过emits触发更新。
这个是vue2的老套做法
这就纳闷了,我正是采用了vue3的新语法糖实现的啊,实际一样的操作,只不过是简写而已。
问题原因
我用的vue版本是3.4.21,查阅官方文档得知,自3.4版本以后,推荐使用defineModel() 宏来实现组件上的双向绑定;看到这大致明白了,因为vue3刚出来时,这个defineModel宏还是试验阶段,现在最新版后要推正式了,老旧的做法或许将被遗弃
组件间使用v-model的官方文档说明
问题解决
解决办法就是用最新做法使用defineModel()宏来实现组件间数据双向绑定;用这个宏确实比之前老旧用法更易懂直白,用了之后,一个字爽;具体用法可以看我上面给的链接,可以绑定多个或单个。
总结
vue自3.4版本以后,组件间数据双向绑定推荐使用defineModel()宏来实现,而不是用之前做法。/