I don't understand why even if I use ChangeDetectionStrategy.OnPush and changeDetectorRef.detach() the function ngDoCheck keep been called. I have thousands of components in my app, and I'd like to block the changeDetection of child1 if an event (mouse click, etc) has been raised from child2.
Here is a plunker
As you can see I have a father component
@Component({
  selector: 'my-app',
  template: `     
    <app-child1 test="test"></app-child1>
    <app-child2 test="test"></app-child2> `,
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class AppComponent {
  test = 'test';
constructor() { }
  ngDoCheck() {
    console.log("### ngDoCheck app component");
  }
}
and 2 identical children:
@Component({
  selector: 'app-child1',
  template: `<input type="text" [(ngModel)]="test" /><br/> `,
    changeDetection: ChangeDetectionStrategy.OnPush
})
export class Child1Component implements OnInit {
  @Input()
  test: string;
  constructor(public cd: ChangeDetectorRef) { }
  ngAfterViewInit() {
      console.log("###### DETACH child 1");
      this.cd.detach();
  }
  ngDoCheck() {
    console.log("### ngDoCheck child 1");
  }
}
If I start typing in the input of child1, the ngDoCheck function of child2 is called.
Think about having thousands of children, it get really slow...
Thank you!
 
     
    