我的父组件中有一个对象,它看起来像这样,并向下传递给我的子组件(app-custom-component):
myObject = {
name: 'John'
}
...
<app-custom-component [inputObject]="myObject"></app-custom-component>
在我的子组件(app-custom-component)中,我这样做:
@Input() inputObject;
displayName = '';
ngOnInit() {
this.displayName = this.inputObject.name;
}
...
<label>{{displayName}}</label>
但是当我在父组件中更改myObject.name
时,它不会更新子组件的displayName
。
在父组件中更改displayName
时如何更新myObject.name
?
答案 0 :(得分:4)
用getter
代替displayName
会容易得多。
@Input() inputObject;
ngOnInit() {
}
get displayName(){
return this.inputObject.name;
}
...
<label>{{displayName}}</label>
答案 1 :(得分:2)
对输入使用getter和setter方法
@Input()
get inputObject() {
return this.displayName;
}
set inputObject(value) {
this.displayName = this.inputObject.name;
}
答案 2 :(得分:0)
据我所知,初始化组件时,onInit()仅执行一次。尝试将代码也放入ngOnChanges()。
deploy:assets:backup_manifest
答案 3 :(得分:0)
您可以使用ngOnChange()
并跟踪相关@Input
的所有更改。
答案 4 :(得分:0)
为此,我建议避免使用吸气剂,这样就不必进行不必要的重新渲染。
ngOnChanges(changes: SimpleChanges) {
this.displayName = changes.inputObject.currentValue.name;
}
确保也实现OnChanges
接口。