我有这个组件:
@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
方法中调用它时,我得到了以下错误:
错误类型错误:_this.childObject.copy不是函数。
更新:子对象类
export class ChildObject {
constructor(
public name: string // , ...
) { }
copy(childObject: ChildObject) {
this.name = childObject.name;
// ...
}
}
3条答案
按热度按时间dtcbnfnu1#
这将不起作用,您应该在此处使用
service
或@Output
,如果组件之间只有这种通信,我建议在此处使用@Output
父组件****Html
ts
w8f9ii692#
编辑:直接赋值将不起作用,因为它会将原始对象引用替换为新对象引用
但是,对现有对象的任何更新都应该有效
应该可以工作,因为在传递输入时对象是作为引用传递的。我在您发布的代码中看到的唯一问题是您应该将childObject作为this引用。childObject
这应该行得通。虽然我不会这样做。这可以用一种更干净的方式来做。
r1zhe5dt3#
您可以通过在子项上添加
ChangeDetectionStrategy.OnPush
来更改该值只要在子组件
component
上有任何事件触发,它就会更新您的对象。这种情况下,子组件和父组件changeDetection
都将发生,因此它将更新您的对象希望您期待的是这样的结果-编码快乐!!