在Vue2中组件的props的数据流动改为了只能单向流动,即只能由组件外(调用组件方)通过组件的DOM属性attribute传递props给组件内,组件内只能被动接收组件外传递过来的数据,并且在组件内,不能修改由外层传来的props数据
因此由父组件传入的用户信息 userInfoFromFather: {} 不能直接绑定到弹窗内各个表单控件的v-model里,必须把userInfoFromFather: {} 赋值给一个新的对象 userInfoInChild: {} ,再把这个userInfoInChild: {}绑定到弹窗的表单控件的v-model里供用户进行编辑后提交,这样就达到了不直接编辑父组件的原有用户信息的目的
如何把userInfoFromFather: {} 赋值给一个新的对象 userInfoInChild: {}呢?
在子组件内watch监听父组件传入子组件的属性即可,一旦传入的属性有变动,立即赋值。
更新
经过大量实践,上面使用watch的方案不方便,需要在子组件内定义多一个临时变量。
并且有bug,watch内的回调只会在被watch的属性有变动时才会执行,所以说无论被watch的属性在 首次 被如何操作,均不会触发回调,只有在 第二次 被操作时才会被触发。
所以更好的方案是,在父组件直接通过this.$refs.childCompoent.prop = XXX 对子组件直接进行属性的赋值。