У меня вопрос по следующему коду:
Ребенок
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 pipe, поведение будет таким же. Итак, если представление обновляется правильно, почему не вызывается ngOnChanges? Кто отвечает за обнаружение изменений для отображения в представлении?
Таким образом, сомнения заключаются в следующем. Почему при добавлении элемента в массив представление обновляется правильно, но почему ngOnChanges не вызывается?
Обнаружение изменений делается по другому?