经常会遇到一些小bug,多遇到几次就会熟悉是什么原因造成的了
当我从接口获取数据进行赋值的时候,从network里看接口返回的对象参数,和我赋值后自己定义的对象参数一比对,发现里面有些字段的值不对应,遇到这种情况,基本上都是因为我们拿到数据之后,又去其他地方进行了重新赋值
对象在内存里的地址都是同一个,所以后面的改动也会影响到前面赋值的地方
bug重现:一个表单类的页面,保存后会调获取详情的接口,当我赋值给自己定义的对象后,又把这个对象当作参数传到封装的子组件中,在子组件的watch中监听这个对象,做一些判断
写错的地方就在于监听里,将对象重新赋值了,正确的应该是给我需要的参数赋值对象里的值,我自己糊涂写反了
大概就是下面这样:
父页面,这里给form赋值之后,传到子组件中
父页面的子组件
子组件的prop
子组件的watch,bug引起的原因
form: {
handler(newVal) {
if (this.id) {
let code = this.deptOptions.find(v => newVal.deptCode == v.deptCode)
if (!code) {
this.form.deptCode = this.deptOptions[0].deptCode //就是这里的三行写错了
this.form.deptId = this.deptOptions[0].deptId //form被重新赋值了
this.form.deptName = this.deptOptions[0].deptName
}
}
},
deep: true,
},
子组件watch,正确写法
form: {
handler(newVal) {
if (this.id) {
let code = this.deptOptions.find(v => newVal.deptCode == v.deptCode)
if (!code) {
let obj ={
deptCode: this.form.deptCode,
deptId:this.form.deptId ,
deptName:this.form.deptName ,
}
this.deptOptions.push(obj)
}
}
},
deep: true,
},