Изучая разницу между ngOnChanges и DoCheck в Angular, я вижу кое-что, что не могу объяснить, и мне нужна ваша помощь.
В принципе, я понимаю, что ngOnChanges не может распознать изменение массива или объекта, а DoCheck может. Я создал stackblitz здесь: https://stackblitz.com/edit/angular-ivy-sbyzya?file=src/app/app.component.html
В app.component.html
- Если вы прокомментируете строку 2, то есть только компонент, который запускает ngOnChanges, данные не сортируются при нажатии кнопки добавления или редактирования. Это правильно, потому что OnChange не может обнаружить изменение массива @Input.
<data-table-onchange [data]="numbers"></data-table-onchange>
<!-- <data-table-docheck [data]="numbers"></data-table-docheck> -->
- Если вы закомментируете строку 1, то только компонент, который запускает DoCheck, данные сортируются при нажатии кнопки добавления или редактирования. Это правильно, потому что DoCheck может обнаружить изменение массива @Input.
<!--<data-table-onchange [data]="numbers"></data-table-onchange> -->
<data-table-docheck [data]="numbers"></data-table-docheck>
- Но если вы разрешите запускать оба дочерних компонента, при нажатии кнопки добавления или редактирования данные в обоих дочерних компонентах будут отсортированы. Мне это кажется странным, потому что я не понимаю, почему DataTableOnchangeComponent может запускать функцию сортировки. Я поставил сортировку в ngOnChanges, ngOnChanges не запускался при нажатии кнопки добавления или редактирования, но каким-то образом данные все равно сортируются.
<data-table-onchange [data]="numbers"></data-table-onchange>
<data-table-docheck [data]="numbers"></data-table-docheck>