ChangeDetection – Stepan Suvorov Blog https://stepansuvorov.com/blog Release 2.0 Tue, 06 Dec 2016 21:40:52 +0000 en-US hourly 1 https://wordpress.org/?v=6.3.1 Как запустить Angular2 ChangeDetection вручную https://stepansuvorov.com/blog/2016/12/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d1%82%d1%8c-angular2-changedetection-%d0%b2%d1%80%d1%83%d1%87%d0%bd%d1%83%d1%8e/ https://stepansuvorov.com/blog/2016/12/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d1%82%d1%8c-angular2-changedetection-%d0%b2%d1%80%d1%83%d1%87%d0%bd%d1%83%d1%8e/#respond Tue, 06 Dec 2016 21:40:52 +0000 http://stepansuvorov.com/blog/?p=3175 Continue reading ]]> Небольшая заметка по мотивам ответа на stackoverflow.

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

ApplicationRefNgZoneChangeDetectorRef,

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

  • 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]

 

 

 

]]>
https://stepansuvorov.com/blog/2016/12/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d1%82%d1%8c-angular2-changedetection-%d0%b2%d1%80%d1%83%d1%87%d0%bd%d1%83%d1%8e/feed/ 0