почему ngDoCheck () вызывается, когда я вызвал detach () из ChangeDetectorRef? - PullRequest
0 голосов
/ 13 ноября 2018

Я просматривал некоторые статьи об обнаружении изменений и пытался включить или отключить обнаружение изменений с помощью changeDetectorRef.detach() и changeDetectorRef.reattach().

Я также подключил компонент к ngDoCheck() только для того, чтобы найти ngDoCheck(), вызываемую даже после detach(). Что я делаю неправильно ? Может кто-нибудь объяснить, почему ngDocheck() называется? У меня даже ChangeDetectionStartegy установлен на OnPush тоже. Это статья, которую я изучал, чтобы понять обнаружение изменений

Я также создал пример для этого: https://stackblitz.com/edit/angular-4ytdbs

1 Ответ

0 голосов
/ 13 ноября 2018

Это потому, что detach() отсоединяет компонент от его собственного ChangeDetector, поэтому он не проверяет привязки шаблона / ввода / хоста.Это не то, что делает ngDoCheck.Это используется для реализации своего рода обнаружения изменений, для изменений, которые, как вы знаете, произойдут, но угловые не могут предвидеть.Он вызывается для любого цикла в любом месте приложения.

Полагаю, единственный способ не запускать ваш код внутри ngDoCheck - это установить флаг при отсоединении:

ngDoCheck(): void {
  if (attached) {
    // ...
  }
}

НоЯ уверен, что вы тоже это поняли:)

Ссылка , предоставленная @selemmn, действительно дает хорошее представление

...