Angular 4: разница между ngDoCheck и ngAfterViewChecked

В Angular 2+ ngDoCheck и ngAfterViewChecked, похоже, выполняют ту же функцию. Считается, что ngDoCheck вызывается всякий раз, когда срабатывает обнаружение изменений. Теперь это обнаружение изменений будет запускаться при изменении просмотра. Согласно документации, ngAfterViewChecked вызывается при изменении представления.

Зачем здесь два крючка жизненного цикла, когда одного было достаточно?

Один предназначен для любых изменений, один - для просмотра изменений, завершающих обнаружение изменений.

Gary 06.06.2018 05:27
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
1
5 071
4

Ответы 4

Хук DoCheck позволяет интегрироваться в цикл обнаружения изменений и находить изменения в ссылках на объекты или в любых областях, где Angular не обнаружил изменения автоматически. Интерфейс такой:

interface DoCheck {
    ngDoCheck(): void; 
}

в зависимости от размера и сложности дерева компонентов метод ngDoCheck переходит в выполнять огромное количество раз и может стать узким местом в производительности, если вы плохо реализуете код. Избегайте использования метода ngDoCheck без необходимости.

При использовании свойств типа объекта Angular будет отслеживать изменения по ссылке на значение, что означает, что он обнаруживает изменение всего значения, но не изменения дочерних свойств. Это тот случай, когда мы собираемся использовать ловушку жизненного цикла DoCheck и обнаруживать изменения в объекте.

Метод ngAfterViewChecked представляет собой ловушку и интерфейс жизненного цикла AfterViewChecked. Это позволяет вам обеспечивать отслеживание пользовательских изменений, которые по какой-то причине не обрабатываются Angular. Поведение аналогично обработчику AfterContentChecked, но применяется к дочерним элементам шаблона представления, а не к проецируемому содержимому.

interface AfterViewChecked {
    ngAfterViewChecked(): void; 
}

В первую очередь DoCheck предназначен для изменений вашей бизнес-логики, которые не будут обнаружены angular в сценариях, как указано выше. AfterViewChecked предназначен для отслеживания просмотра.

Надеюсь, это поможет!!!

это огромная разница:

ngDoCheck вызывается очень часто при каждом запуске обнаружения изменений, и обычно вам следует избегать его использования, чтобы избежать проблем с производительностью. Он обнаружит изменения в любом элементе, содержимом или поведении изменения представления.

ngAfterViewChecked вызывается только после проверки привязок дочерних представлений (это относится только к представлению).

Это оба угловые хуки жизненного цикла. И это интерфейсы из основной библиотеки Angular, которые можно подключить к вашему коду, чтобы отслеживать изменения свойств компонента.

Вот полная последовательность цикла

1) ngOnChanges ()

2) ngOnInit ()

3) ngDoCheck ()

4) ngAfterContentInit ()

5) ngAfterContentChecked ()

6) ngAfterViewInit ()

7) ngAfterViewChecked ()

Из официальной документации

ngDoCheck

Detect and act upon changes that Angular can't or won't detect on its own.

Called during every change detection run, immediately after ngOnChanges() and ngOnInit().

ngAfterViewChecked ()

Respond after Angular checks the component's views and child views / the view that a directive is in.

Called after the ngAfterViewInit and every subsequent ngAfterContentChecked().

Для более подробной информации: https://blog.angularindepth.com/if-you-think-ngdocheck-means-your-component-is-being-checked-read-this-article-36ce63a3f3e5

Следует отметить одно важное отличие: ловушка жизненного цикла ngDoCheck запускает перед, изменения свойств в текущем компоненте и его дочерние компоненты вступили в силу, тогда как ngAfterViewChecked запускает после, когда эти изменения произошли, поэтому вы сравниваете предыдущие и текущие значения свойств компонента.

Другие вопросы по теме