Ich schreibe eine eckige 2-Anwendung, wo ich versuche, ChangeDetectionStrategy.OnPush aus Leistungsgründen überall zu verwenden. Ich habe eine komplexe Komponente, die OnPush benötigt, um reibungslos zu funktionieren, die eine andere Komponente enthält, die ein Formular anzeigt (erstellt mit FormBuilder). Ich habe jetzt bemerkt, dass, wenn ich auf einen Schieberegler klicke, der interne Wert davon aktualisiert wird (d. H. Form.value), aber die Schieberkomponente diesen neuen Wert nicht visualisiert, d. H. Sie bleibt an der alten Position hängen.Angular 2 Formen + OnPush
Meine erste Idee, dies zu beheben, war, die Änderungsdetektionsstrategie der Blattkomponente auf DEFAULT zu setzen, aber dies hatte keine Auswirkungen, da dies offensichtlich die Änderungserkennungsstrategie der übergeordneten Komponenten ändern muss (was in meiner Anwendung nicht möglich ist)).
Dann kam ich mit dieser Idee:
@Component({
...
})
class MyComponent implements OnInit {
constructor(private zone: NgZone) {}
ngOnInit() {
INIT_FORM();
this.form.valueChanges
.subscribe(() => {
this.zone.run(() => {});
});
}
}
aber es hat keine Wirkung.
Gibt es eine Möglichkeit, kantige 2 Formen innerhalb einer Komponente, die OnPush verwendet, zu arbeiten?
Sie müssen sicherstellen, dass mindestens einer der '@ Input's von Ihrer Komponente verwendet, die' ist OnPush' a haben neue Referenz bei jeder relevanten Änderung. Eine gute Anleitung, um die gesamte Anwendung zu 'OnPush' zu machen, finden Sie [hier] (https://vsavkin.com/managing-state-in-angular-2-applications-caf78d123d02#.1z6lg1hlu) – cvsguimaraes