场景
编辑的时候发现个别字段回显失败,使用@change="$forceUpdate()"
来强制回显,但是又出现了新问题,编辑时给el-select选定了值,但是validate提示未选择。validate新增时却是正常的。于是发现是Object.assign的问题。
后台返回数据为row,通过Object.assign进行拷贝
this.ruleForm = Object.assign({},row) //this.ruleForm为表单数据,row为后台返回的数据信息
原因
通过Object.assign直接将后台返回的数据赋值给form,后台返回的数据中没有select model 绑定的数据,而vue 无法监听动态新增的属性的变化。
解决方案:
拷贝时加上初始化时的数据格式
this.ruleForm = Object.assign({},this.ruleForm,row)
扩展
Object.assign 不会跳过那些值为 null 或 undefined 的源对象。
场景如下:
o1 = {a:1, b:null }
o2 = Object.assign(o1, {a:2,b:3} ); //{a: 2, b: 3}
因此一定要检查后端返回的数据里,有没有属性值为 null或者 undefined,null 和undefined 禁止出现在正常的数据格式中