У меня есть вопрос, связанный со следующим кодом:
Child
export class ChildComponent implements OnChanges {
public @Input() data: string[];
ngOnChanges(changes: SimpleChanges) {
console.log('I am here');
}
}
Child Template
{{ data | json }} // This is not necessary. The behaviour is the same with or without it.
<div *ngFor="let item of data">
{{ item }}
</div>
Parent
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 будет вызываться только при изменении ссылки на массив, и если я добавлю sh элемент в массив, он не будет вызван. Следующее привлекает мое внимание. Когда я нажимаю кнопку добавления, новый элемент добавляется в массив, и представление обновляется правильно. Я использую канал json и ngFor, чтобы доказать, что он обновляется правильно. Если я не использую json pipe, поведение будет таким же. Итак, если представление обновлено правильно, почему не вызывается ngOnChanges? Кто несет ответственность за обнаружение изменения, отображающего его в представлении?
Таким образом, сомнение заключается в следующем. Почему при добавлении элемента в массив представление корректно обновляется, но почему не вызывается ngOnChanges?
Обнаружение изменений выполняется по-другому?