Как запустить Angular2 ChangeDetection вручную

Небольшая заметка по мотивам ответа на stackoverflow.

Внедрив следующие сервисы в компонент

ApplicationRefNgZoneChangeDetectorRef,

мы можем добиться следующего:

  • ApplicationRef.tick() – то есть запуск changeDetection на корневом элементе, то есть соотвественно запуск на всех элементах дерева(аналог  $rootScope.$digest() )
  • NgZone.run(callback) – тоже самое что и предыдущий вариант, только с выполнением колбэка (аналог $rootScope.$apply(callback) )
  • ChangeDetectorRef.detectChanges() – запуск механизма обнаружения изменений только на текущем элементе ( аналог $scope.$digest() )

Ну и так, бонусом: отсоединение и присоединение обратно детектора изменений конкретного компонента:

constructor(private cd: ChangeDetectorRef) {
    this.cd.detach();
    setInterval(() => {
      this.cd.detectChanges();
    }, 5000);
  }