2016-04-08 13 views
0

Betrachten Sie die folgende Komponente Baumstruktur in Angular2Wie erkennen wir, dass Change Detection in Angular2 ohne direkten @Output ausgeführt wurde?

A 
    B 
D E 

Wenn D ein Ereignis per Klick auf B aussendet, angular2 wird automatisch die Änderungserkennung von der Wurzel A starten. Gibt es einen Weg zu console.log, dass die Erkennung aus, auch wenn ist nicht direkt emittieren Ereignis zu A?

Zum Beispiel in D

html

<div (click)="update($event)"></div> 

component

@Output() myOutputName = new EventEmitter(); 

update(event) { 
    this.myOutputName.emit('some vlaue'); 
} 

In B

(myOutputName)="update($event)" 

Aber wenn B dieses Ereignis nicht weitergibt, habe ich keine Möglichkeit zu sagen, ob A seine Änderungserkennung ausführt.

Die Motivation dafür ist, um herauszufinden, welche Komponente für das Debuggen Zweck auf jeder Komponente

Antwort

1

Implementieren ngDoCheck()Change Detection ausgeführt hat. Es handelt sich um einen Lebenszyklushaken, der jedes Mal aufgerufen wird, wenn die Änderungserkennung für eine Komponente ausgeführt wird.

Siehe auch https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html#!#docheck

ist jedoch zu beachten, dass, nur weil das Verfahren nicht notwendigerweise bedeutet, genannt wird, dass die Template-Bindings für Änderungen überprüft wurden. Ich glaube (ich könnte falsch liegen, das ist aus dem Gedächtnis, wenn ich vor einiger Zeit mit einem Plünderer gespielt habe), dass selbst wenn die erste OnPush Komponente nicht markiert ist, ngDoCheck() immer noch aufgerufen wird, aber ich glaube nicht, dass die Vorlagenbindungen überprüft werden . Wenn die Komponente OnPush nicht zur Prüfung markiert wurde, wird ngDoCheck() nicht für die untergeordneten Komponenten aufgerufen.