Небольшая заметка по мотивам ответа на stackoverflow.
Внедрив следующие сервисы в компонент
ApplicationRef, NgZone, ChangeDetectorRef,
мы можем добиться следующего:
- ApplicationRef.tick() – то есть запуск changeDetection на корневом элементе, то есть соотвественно запуск на всех элементах дерева(аналог $rootScope.$digest() )
- NgZone.run(callback) – тоже самое что и предыдущий вариант, только с выполнением колбэка (аналог $rootScope.$apply(callback) )
- ChangeDetectorRef.detectChanges() – запуск механизма обнаружения изменений только на текущем элементе ( аналог $scope.$digest() )
Ну и так, бонусом: отсоединение и присоединение обратно детектора изменений конкретного компонента:
[javascript]
constructor(private cd: ChangeDetectorRef) {
this.cd.detach();
setInterval(() => {
this.cd.detectChanges();
}, 5000);
}
[/javascript]