Triggering change detection manually in Angular

I’m writing an Angular component that has a property Mode(): string.

I would like to be able to set this property programmatically not in response to any event.

The problem is that in the absence of a browser event, a template binding {{Mode}} doesn’t update.

Is there a way to trigger this change detection manually?

5 Answers
5

Try one of these:

  • ApplicationRef.tick() – similar to AngularJS’s $rootScope.$digest() — i.e., check the full component tree
  • NgZone.run(callback) – similar to $rootScope.$apply(callback) — i.e., evaluate the callback function inside the Angular zone. I think, but I’m not sure, that this ends up checking the full component tree after executing the callback function.
  • ChangeDetectorRef.detectChanges() – similar to $scope.$digest() — i.e., check only this component and its children

You can inject ApplicationRef, NgZone, or ChangeDetectorRef into your component.

Leave a Comment