Angular: Change Detection

Методы управления CD

  • ChangeDetectorRef.detectChanges() — запускает CD для этого компонента и его детей, уважая CD-стратегию детей.
  • ChangeDetectorRef.markForCheck()не запускает CD, а помечает всех OnPush-родителей для проверки в текущем или следующем цикле CD.
  • ApplicationRef.tick() — запускает CD для всего приложения, уважая CD-стратегии.

NgZone и runOutsideAngular

NgZone позволяет выполнять код вне зоны Angular, чтобы не запускать change detection — полезно для оптимизации производительности (например, частые события: скролл, mousemove, анимации).

constructor(private ngZone: NgZone) {
  ngZone.runOutsideAngular(() => {
    // код вне change detection Angular
    // zone.js не триггерит CD
  });
}

Конфигурация ngZone: 'noop' полностью отключает zone.js и автоматический change detection — тогда CD нужно запускать вручную.