Each component has its own ChangeDetectorRef, and we can inject ChangeDetectorRef into constructor:
export class ChildComponent implements OnInit { constructor( private cdr: ChangeDetectorRef )
For example if you have a huge list can be updated in real time though some real time database.
Update in real time is really expensive for huge list.
We have build a custom change detector, for example, update every 5 seconds, to check changes, to do that, we need to two things,
1. Disable default change detector
2. Check for changes every 5 seconds.
import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; import { ListService } from './list.service'; @Component({ selector: 'app-child', templateUrl: './child.component.html', styleUrls: ['./child.component.css'] }) export class ChildComponent implements OnInit { constructor( private cdr: ChangeDetectorRef, private dataProvider: ListService ) { // disable default change detector cdr.detach(); // now every 5second, do a check for its child tree setInterval(() => { this.cdr.detectChanges(); }, 5000); } ngOnInit() { } }
There is another API: reattach() which uses for reset to default Angular change dectctor.