[Angular] Angular Custom Change Detection with ChangeDetectorRef

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.

 

 

posted @ 2019-01-28 19:22  Zhentiw  阅读(397)  评论(0)    收藏  举报