Ich bekomme gerade meinen Kopf um Winkel 2 und schaue auf die Gestaltung eines Assistenten Art der Anwendung. Komponenten auf Seite 1 müssen Daten an Komponenten auf anderen Seiten übermitteln. Denken Sie daran, einen Service zu verwenden, um Status/Daten beizubehalten, die in der nächsten Ansicht/Komponente des Assistenten eingegeben werden. Das Ganze sollte locker gekoppelt sein. Ich denke nicht, dass es nützlich ist, ein beobachtbares Muster zu entwerfen, weil eine Komponente, die sich auf einer der nächsten Seiten/Ansichten befindet, noch nicht sichtbar ist. Welche neuen Funktionen in eckigen 2 könnten dazu verwendet werden, dies zu lösen?Wie wird der Zustand in Winkel 2 gehalten?
Antwort
prüfen @ngrx/store
RxJS angetrieben Zustandsverwaltung von Redux für Angular2 inspiriert apps
Ich schlage vor, Ihren Zustand zentralisiert mit z. B. Redux. Sie verwenden dann @Input() und @Output() von angular, um Ihren Status an Komponenten weiterzugeben und Statusänderungen von Ihren Komponenten zu verteilen.
Sie hätten eine Komponente auf oberster Ebene, die Änderungen am Status abonniert und diese unter Verwendung der untergeordneten Komponente @Inputs propagiert. Ihre untergeordneten Komponenten senden Anforderungen von Statusänderungen mithilfe von @Outputs() an die Komponente auf oberster Ebene, die wiederum den zentralen Status aktualisiert.
Auf diese Weise muss Ihre individuelle Komponente nichts darüber wissen, wie der Status gespeichert und aktualisiert wird, sie stellen lediglich Funktionalität bereit und akzeptieren Eingabeparameter, die die gewünschte Wirkung auf ihre Funktionalität haben können.
Wenn Sie viele tief geschachtelte Komponenten haben, verwenden sie selbst auch @Input() und @Output(), um die Funktionalität bereitzustellen, und kommunizieren nicht direkt mit einem Statusspeicher.
Ich benutze selbst diese Methode und es hält jede Komponente sehr schlank und wiederverwendbar, während es sehr einfach macht, den Überblick über Ihren Zustand zu behalten, und reduziert die Komplexität der Synchronisierung Ihres Zustands über Komponenten hinweg.
Sie sollten sich zusätzlich ChangeDetectionStrategy und ChangeDetectorRef ansehen, da Sie mit dieser Methode die Erkennung von Komponentenänderungen vereinfachen können. Alle Ihre untergeordneten Komponenten können im Allgemeinen die so genannte OnPush-Prüfstrategie verwenden, was bedeutet, dass ihre Änderungserkennung nur ausgeführt wird, wenn sich ihre @Input() - Eigenschaften geändert haben. Da dies die einzige Möglichkeit ist, den Zustand in diesem Fall zu ändern, können Sie angular nicht die Überprüfung auf Änderungen anders bestimmen. Dies wird auch mit der Leistung helfen.
Beachten Sie, dass Sie den Status nur mit einem regulären angular2-Dienst beibehalten können, aber etwas wie Redux gibt Ihnen einige Dinge kostenlos, wie zum Beispiel die bereitgestellten Dev-Tools. Wenn Sie mit Redux arbeiten, sollten Sie sich auch Immutable.js ansehen, da es wichtig ist, den Status nicht direkt mit Redux zu ändern.
Danke, das ist ein netter Ansatz! Wie erhalten Sie im Falle tief verschachtelter untergeordneter Komponenten den Statuswechsel zurück auf die oberste Komponente, die den "Hauptstatus" der Ansicht/App enthält? Haben Sie eine Kette von Ausgaben, die nach oben gehen, oder gibt es eine Abkürzung, die für die Umgehung dieser Arten von Ketten verwendet werden kann? – Janne
Im Allgemeinen würden Sie eine Kette von Ausgaben nach oben gehen.Wenn es viel zu verschachtelt ist, um mit der Arbeit zufrieden zu sein, könnte es sich lohnen, die Verantwortung der obersten Ebene in mehr als eine Komponente aufzuspalten, die verschiedene Bereiche des zentralisierten Zustands manipuliert und abonniert. – jgranstrom
Ich habe die beste Praxis und/oder die Art und Weise, wie eckig mich dazu "will", noch nicht vollständig verstanden. In den meisten Fällen habe ich mich auf viele Inputs-Outputs verlassen, aber in letzter Zeit habe ich erkannt, dass ich einfach nur einige Eigenschaften zu einem Service hinzufügen und sie in die Komponenten einspeisen kann, die ich brauche, um den Status von/zwischen zu speichern. Der Service ist im Wesentlichen "zentralisierter Speicher" - vielleicht ist das Redux, nur viel ausgeklügelter? Oder Nein? Gibt es ein Problem mit meinem Ansatz, einen Service zu nutzen und auf DI anstatt auf viele In/Outs zu setzen? Ich finde es einfach, den Service zu injizieren. – JzInqXc9Dg
- 1. Wie wird der Cache von EntityManager mit Hibernate unter JBoss in einem konsistenten Zustand gehalten?
- 2. Warum wird $ in Winkel 2 nicht erkannt?
- 3. Wie wird das Etikett in der Scrollbox zentriert gehalten?
- 4. Wie in Winkel 2 Stil
- 5. Wie Winkel 1.3.4 und Winkel 2 zusammen
- 6. Wie wird die Komponente in Winkel 2 angezeigt?
- 7. Buttons in Winkel 2
- 8. Wie wird ein Jahr eines Datumstyps in Winkel 2 subtrahiert?
- 9. Verwenden Inhalt der Komponentenvorlage in Winkel 2
- 10. Polymerelemente in Winkel 2 Komponente
- 11. Der Unterschied zwischen ":" und =“in Winkel 2
- 12. Detect Maus wird gedrückt gehalten
- 13. Wie wird der HTML5-Live-Videostream nach Verbindungsverzögerungen synchron gehalten?
- 14. ASP.NET MVC 2: Wird das Modell in der Ansicht auf dem neuesten Stand gehalten?
- 15. Winkel ui-Router geht zu falschem Zustand
- 16. Wie schreiben wir Grundeinheitstest in Winkel 2?
- 17. Isotop mit Winkel 2
- 18. Wie wird der gemeinsame veränderbare Zustand dargestellt?
- 19. Wie funktioniert main.d.ts in Winkel 2?
- 20. wie Underscore.js Bibliothek verwendet in Winkel 2
- 21. wie @CanActivate zu verwenden, in Winkel 2
- 22. Winkel ui Raster speichern und wiederherstellen Zustand
- 23. , wie mobile-Winkel-ui "ui-Zustand" von Controller-Code ändern
- 24. Domain Modell Winkel 2
- 25. innerhalb iframe in Winkel 2
- 26. Rohr json Winkel 2
- 27. Daten mit Winkel 2
- 28. Winkel 2 scrollTo Verhalten
- 29. Wie wird der vorzeichenbehaftete Winkel zwischen 2 Vektoren mit einer gegebenen Achsennormalen in 3D berechnet?
- 30. wie auf einer Auswahl der Checkbox Winkel 2
Bitte einen Code hinzufügen, dass, was Sie versuchen zu erreichen, demonstriert. Angular stellt '@Input()', '@Output()' für Eltern-Kind-Beziehungen (bis zu einem gewissen Grad für Geschwister) und Dienste für alle anderen bereit. –
Was ist mit alten guten Pass-Parametern von einer Route zur anderen? – smnbbrv
Sie könnten einen Service mit einem RxJS 'BehaviorSubject' verwenden, um sicherzustellen, dass die Komponenten, die noch nicht sichtbar sind, die neuesten Daten erhalten, wenn sie initialisiert werden. https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/behaviorsubject.md – Harry