要解决这个问题,首先需要确保输入属性名字发生变化时会触发ngOnChanges。 因此,可以使用@Input装饰器的setter方法。这样,当输入属性更改时,setter将被调用,从而触发ngOnChanges。
示例如下:
// parent.component.ts import { Component } from '@angular/core';
@Component({
selector: 'app-parent',
template:
,
styleUrls: ['./parent.component.css']
})
export class ParentComponent {
parentData = 'message from parent';
}Parent
// child.component.ts import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
@Component({
selector: 'app-child',
template: {{ childData }}
,
styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnChanges {
@Input() childData: string;Child
ngOnChanges(changes: SimpleChanges) { console.log('ngOnChanges - childData', changes); } }
在ChildComponent中的@Input("childData") getter方法将返回输入属性的值。 setter方法用于通知框架,当属性值被修改时需要更新值。
这样,当在父组件中修改值时,会触发ngOnChanges并更新子组件中的值。