我有一个与以下代码相关的问题:
孩子
export class ChildComponent implements OnChanges {
public @Input() data: string[];
ngOnChanges(changes: SimpleChanges) {
console.log('I am here');
}
}
子模板
{{ data | json }} // This is not necessary. The behaviour is the same with or without it.
<div *ngFor="let item of data">
{{ item }}
</div>
家长
export class AppComponent implements OnInit {
public test: string[] = ['hello'];
ngOnInit() {
console.log('I am here');
}
public addItem() {
this.test.push('sample');
}
}
父模板
<child-component [data]="test"></child-component>
<button (click)="addItem()">Add</button>
我知道只有在数组引用发生更改时才会调用 ngOnChanges,如果我将元素推送到数组中,它将不会被调用。以下引起了我的注意。当我按下添加按钮时,一个新元素被添加到数组中并且视图被正确更新。我使用 json 管道和 ngFor 来证明它更新正确。如果我不使用 json 管道,行为是一样的。那么,如果视图更新正确,为什么不调用 ngOnChanges 呢?谁负责检测是否有更改以在视图中显示?
综上所述,疑点如下。为什么当一个元素被添加到数组中时,视图会正确更新,但为什么没有调用 ngOnChanges?
变化检测的方式不同?