【发布时间】:2019-02-06 11:01:53
【问题描述】:
解释: 子组件方法已从父组件调用,并使用array of objects 作为参数。在子组件中,将此array 赋值给一个变量。
父组件:
let obj = [{
'prop1': 'value1',
'prop2': 'value2'
},{
'prop1': 'value1',
'prop2': 'value2'
}];
this.child.sendObject(obj);
子组件:
public sendObject(obj) : void {
this.updatedObj = obj;
}
问题陈述:
-
从父组件传递的对象的属性可以更新并发送到子组件。
父组件:
let obj = [{ 'prop1': 'value4', 'prop2': 'value2' },{ 'prop1': 'value1', 'prop2': 'value7' }]; this.child.sendObject(obj); -
可以在
obj数组中的子组件本身中添加新对象。子组件:
public sendObject(obj) : void { this.updatedObj = obj; } public addNewObj() { this.updatedObj.push({ 'prop3': 'value3', 'prop4': 'value4 }) }
我想用这个更新的对象验证(检查相等性)先前发送的对象。
到目前为止我尝试了什么?
子组件:
public sendObject(obj) : void {
const copy = JSON.parse(JSON.stringify(obj));
this.updatedObj = obj;
if (JSON.stringify(this.updatedObj) === JSON.stringify(copy)) {
console.log("Not changed");
} else {
console.log("Changed");
}
}
如果从父组件修改了对象属性,但如果我将任何新对象添加到子组件中的现有数组 (this.updatedObj) 并从父组件切换回子组件,则上述逻辑工作正常。它中断并仅显示从父级传递的对象。
【问题讨论】:
-
在最后一段代码中,将
obj的副本分配给let copy,然后将obj分配给this.updatedObj,最后比较copy和this.updatedObj是否是相同,它们将始终相同,因为您只是将相同的obj分配给两个变量 -
此外,由于您将
obj立即分配给this.updatedObj,因此子组件设置的任何内容都将被覆盖。不过,我必须同意@ludevik。只需让一个组件负责obj,您就可以省去很多麻烦。
标签: javascript arrays json angular object