Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
在项目中开始使用vue2来构建项目了,跟vue1很大的一处不同在于2取消了props的双向绑定,改成只能从父级传到子级的单向数据流,初衷当然是好的,为了避免双向绑定在项目中容易造成的数据混乱。
解决方案一
然后开始参考网上和github上的方案等等,发现很多解决方案是这样的
- 用data对象中创建一个props属性的副本
- watchprops属性赋予data副本来同步组件外对props的修改
- watchdata副本,emit一个函数通知到组件外
这里以最常见的modal为例子:modal挺合适双向绑定的,外部可以控制组件的显示或者隐藏,组件内部的关闭可以控制visible属性隐藏,同时visible属性同步传输到外部
///modal.vue组件X
这样就解决了组件props双向绑定的问题。但是这样有一个不是太美观的现象就是在父级调用modal组件的时候,还需要写一个modalVisibleChange的methods.总是显得这部分代码是多余的。特别是写一个让别人用的公共组件,这样调用太麻烦了。能不能不写method来实现props的双向绑定呢,答案是可以的。
优美解决方案
那就是利用v-model,在组件内部放置一个隐藏的input控件来保存v-model的值,进行双向绑定
改成如下代码:
X