Ich habe eine Klasse (Schnittstelle) in meiner eckigen 4-App, die viele Felder hat.
Beachten Sie, dass die Instanz dieser Klasse / Schnittstelle immutable
ist (d. H. Die Mitglieder werden NIE verändert).
z. B.
%Vor%Diese Schnittstelle wird über einen Dienst (Singleton / Anwendungsebene bereitgestellt) bereitgestellt, der die Klasse als Mitglied verfügbar macht. ZB
%Vor% Der Service wird in viele Komponenten (fast alle Komponenten) und oft in die entsprechende Vorlage und oft auch in den ts
-Teil der Komponente eingefügt. Z.B.
Jetzt meine Fragen:
ChangeDetectionStrategy.OnPush
, aber anstatt dies für jede Komponente anzugeben, kann für die Klasse selbst oder für das Mitglied des Dienstes deklariert werden) Bitte beachten Sie, dass ich die Change-Erkennungsstrategie aller meiner Komponenten nicht in OnPush
ändern möchte.
Wird eine große Klasse (mit vielen Feldern) winkelig langsam wegen machen die Änderungserkennung?
Nein. Die Erkennung von Winkeländerungen führt zwei Operationen aus, die Klasseneigenschaften lesen:
Für diese Operationen erzeugt der Angular Compiler zwei Funktionen:
Diese Funktionen lesen nur bestimmte Eigenschaften aus dem Service. Für Ihr Beispiel
Value: {{service.field500}}
Die Funktion updateRenderer
sieht in etwa so aus:
Diese Funktionen werden bei jeder Digest-Schleife aufgerufen. Aber wie Sie sehen können, wird nur die relevante Eigenschaft aus dem Service gelesen. Es spielt also keine Rolle, wie viele Eigenschaften auf dem Dienst vorhanden sind.
Gibt es eine Möglichkeit, eine Klasse als "Ignoriere mich bei Änderungserkennung" zu markieren?
Ich nehme an, Sie fragen nach einer einmaligen Bindung wie in AngularJS. Vielleicht wird es auch in Angular hinzugefügt. Ich werde das überwachen und die Antwort aktualisieren, wenn etwas auftaucht. Aber wie Sie wahrscheinlich wissen, können Sie die Änderungserkennung für die Komponente mit cd.detach/cd.attach
deaktivieren / aktivieren. Sie können auf ein Signal vom Dienst warten und CD manuell ausführen, wenn Sie gebraucht werden.
Hier ist die Liste der Artikel, die Sie lesen könnten, um die Mechanismen der Änderungserkennung besser zu verstehen:
Tags und Links angular angular2-changedetection