Ich studiere Angular 2 Change Detection und ich habe einige Probleme, oder zumindest muss ich ein paar Erklärungen.Angular 2 Change Detection Mechanismus
ist die folgende vereinfachte Code von AppRef Lassen Sie bekommen (und von Througtram Blog):
class ApplicationRef {
changeDetectorRefs:ChangeDetectorRef[] = [];
constructor(private zone: NgZone) {
this.zone.onTurnDone
.subscribe(() => this.zone.run(() => this.tick());
}
tick() {
this.changeDetectorRefs
.forEach((detector) => detector.detectChanges());
}
}
Wir können davon ausgehen, dass es durch die Komponente ein Change ist. Ich gehe auch davon aus, dass es nur eine Zone.js Gabel in einer winkelförmigen 2 Anwendung gibt.
Ab jetzt lassen Sie uns die Code-Implementierung von detectChanges bekommen, wo es einen Vergleich, wie (vereinfacht) ist:
detectChanges(){
//...
if(this.previousValue !== newValue){
this.previousValue = newValue
}
}
Von diesem Punkt, wohl wissend, dass nur eine Zone.js Gabel alle Ereignisse auslösen und dann einen ChangeDetection-Zyklus starten, heißt das, dass alle Detektoren aus dem gesamten Komponentenbaum von diesem Vergleich betroffen sind? Ich meine, wenn ich 1000 Komponenten habe, habe ich 1000 Aufrufe, um Changes zu erkennen?
Danke für Ihre Hilfe
Vielen Dank, es ist jetzt klarer in meinen Gedanken: D – mfrachet
Eine letzte Sache, wo ist der vorherige Zustand zum Vergleich gespeichert? Ich vermute, dass nach einem Änderungserkennungszyklus ein Vergleich vorliegt, der zu sagen hat, ob die Änderungserkennung zutreffen soll oder nicht. Weißt du, wo es im Quellcode liegt? – mfrachet
Tut mir leid, bin noch nicht auf dieses gestoßen. Manchmal unterscheidet sich das in 'ngOnChanges' /' ngDoCheck' wie in 'ngFor' https://github.com/angular/angular/blob/b6746cce9c239a72264d1a8983db378ebc423638/modules/%40angular/common/src/directives/ng_for.ts# L100 aber für Bauteileigenschaften weiß ich nicht. Ich vermute, irgendwo in der Komponente. –