我有这个组件:

@Component({
    selector: 'child'
})
export class ChildComponent {
    @Input() childObject: ChildObject;

    changeObject(newObject: ChildObject){
        childObject = newObject;
    }
}


当我呼叫changeObject时,我的ChildComponent反映了更改,但是包含ParentComponentChildComponent并未对此更改进行更新。

即:如果在我的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;
    }
}





这应该工作。尽管我不会这样。这可以以更清洁的方式完成。

09-25 15:37