走り続けてこそ人生.

选中用户列表内某一列用户,弹出编辑用户信息弹窗

2018/09/13

在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 对子组件直接进行属性的赋值。

CATALOG
  1. 1. 更新