我有这个组件:
@Component({
selector: 'child'
})
export class ChildComponent {
@Input() childObject: ChildObject;
changeObject(newObject: ChildObject){
childObject = newObject;
}
}
当我呼叫
changeObject
时,我的ChildComponent
反映了更改,但是包含ParentComponent
的ChildComponent
并未对此更改进行更新。即:如果在我的
ParentComponent
模板中我有类似{{parent.childObject.name}}
的值,则此值保持不变。我尝试使用
childObject = JSON.parse(JSON.stringify(newObject));
,但无济于事。我猜这是对象引用更改的问题,所以我添加了方法
copy(newObject: ChildObject)
在ChildObject
类中按属性复制属性,但是当我在changeObject
方法中调用它时,出现此错误:ERROR TypeError: _this.childObject.copy is not a function
。更新:ChildObject类
export class ChildObject {
constructor(
public name: string // , ...
) { }
copy(childObject: ChildObject) {
this.name = childObject.name;
// ...
}
}
最佳答案
编辑:
直接分配将不起作用,因为它将原始对象引用替换为新对象
this.childObject = newObject; // Will not work
但是,对现有对象的任何更新都应该起作用
this.childObject.someProperty = newObject; // should work
Object.assign(this.childObject, newObject); // should work since it will assign the merge to the first object
应该起作用,因为在传递输入时将对象作为参考传递。我在发布的代码中看到的唯一问题是,您应将childObject称为this.childObject
@Component({
selector: 'child'
})
export class ChildComponent {
@Input() childObject: ChildObject;
changeObject(newObject: ChildObject){
this.childObject = newObject;
}
}
这应该工作。尽管我不会这样。这可以以更清洁的方式完成。