Почему обнаружение изменений вызывается дважды? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть простой тестовый компонент без логики. Я рендеринг этого компонента. Почему хук DoCheck вызывается дважды?

Насколько я понимаю, DoCheck вызывается для каждого обнаружения изменений. Но нет никаких изменений. Я просто отображаю компонент, а DoCheck уже вызывается два раза Также ngAfterContentChecked и ngAfterViewChecked.

enter image description here

Ответы [ 3 ]

1 голос
/ 23 июля 2019

Обнаружение углового изменения - как оно действительно работает?

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

0 голосов
/ 27 июня 2019

ngDoCheck

Это срабатывает каждый раз, когда срабатывает все, что может инициировать обнаружение изменений (например, обработчики кликов, запросы http, изменения маршрута и т. Д.). Этот хук жизненного цикла в основном используется для целей отладки;

демонстрация запуска ngDoCheck.

Вы можете видеть, что ngDoCheck вызывается для дочернего компонента, когда проверяется родительский компонент. Теперь предположим, что мы реализуем стратегию onPush для компонента B. Как меняется поток? Давайте посмотрим:

Checking A component:
  - update B input bindings
  - call NgDoCheck on the B component
  - update DOM interpolations for component A
 if (bindings changed) -> checking B component:
    - update C input bindings
    - call NgDoCheck on the C component
    - update DOM interpolations for component B

   Checking C component:
      - update DOM interpolations for component C
0 голосов
/ 27 июня 2019

Причина уже описана в документации углового жизненного цикла https://angular.io/guide/lifecycle-hooks#docheck

Обычно Use this method to detect a change that Angular overlooked.

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

...