Ich habe grade erst in der letzten Woche begonnen, in Angular 2 zu graben und (wie viele andere anscheinend) einige ernsthafte Kopfschmerzen beim Routing gehabt. Ich habe angefangen mit dem Router 3.0.0-alpha.7 zu arbeiten. Was ich wirklich tun möchte, ist, einige abgerufene Daten in meiner Basiskomponente mit diesen Kindkomponenten zu teilen. Hier ist meine Routenkonfiguration.
%Vor% Wenn die Basisroute erreicht wird, lade ich einige Daten über einen Service auf der Basis des Parameters: id ab. Sobald diese Daten empfangen werden, möchte ich, dass sie auf die Kinder übertragen werden. Ich hatte gehofft, es wäre so einfach wie @Inputs auf OverviewComp und DocsComp, aber ich erkannte schnell, dass es keine Möglichkeit gibt, dies in der Vorlage zu tun, wenn man bedenkt, dass <router-outlet>
die eigentliche Vorlagenkomponente ist. derp.
Hat jemand irgendwelche Gedanken darüber, was der beste Weg ist, um so etwas zu tun?
Sollte ich mit einer früheren Router-Version (Router-veraltet) arbeiten?
Soll der Parameter id
in die untergeordneten Komponenten verschoben werden?
Sollen untergeordnete Komponenten nur auf den Dienst zugreifen, um die gleichen Daten zu erhalten (zwischengespeichert)?
Sollte ich mit einer früheren Router-Version (Router-veraltet) arbeiten?
Es ist eine Herausforderung, sich so schnell zu entwickeln, wie Angular2 ihr Routing-Konzept umstürzt :). Stellen Sie jedoch sicher, dass Sie sich nicht für den veralteten entscheiden. Es befand sich noch in der Beta-Phase, als sie sich dafür entschieden, es als "veraltet" zu kennzeichnen. Daher sollten Sie wahrscheinlich kein veraltetes nicht-stabiles Routing verwenden.
Soll der ID-Parameter in die untergeordneten Komponenten verschoben werden?
Ich würde sagen, es hängt von Ihrer Struktur ab. Angenommen, Sie haben so viele Routen.
%Vor%Es ist absolut sinnvoll, den Benutzer in einer Komponente aufzulösen, die auf / user /: id wartet, und zwar einmal und nicht in jeder untergeordneten Komponente. Es gibt jedoch einen Nachteil, wenn Sie den Benutzer in Ihren untergeordneten Routen verfügbar machen möchten. Die Verwendung eines Dienstes ist für einen solchen Zweck in Ordnung, aber Sie müssen mit der asynchronen Art von Back-End-HTTP-Anforderungen fertig werden. Wenn die untergeordnete Route aktiviert ist und ihre Komponenten gerendert werden, ist der Back-End-Aufruf möglicherweise noch nicht beendet. Sie können also nicht direkt von Ihrer Kindkomponente auf Ihren Dienst zugreifen, Sie müssen auch eine Observable erhalten. Dies fügt Ihrem Service ein wenig Komplexität hinzu.
Die andere Möglichkeit besteht darin, den Overhead gegenüber der Komplexität zu bevorzugen und alle in der untergeordneten Komponente benötigten Daten aufzulösen. Das heißt, für eine Route wie diese
%Vor%Sie müssen sowohl den Benutzer als auch den Prozess auflösen, und wahrscheinlich hängt der zweite Aufruf für den 'Prozess' von dem 'Benutzer' ab, der zuvor gelöst werden muss. Wenn Sie viele untergeordnete Routen mit vielen IDs haben, um dies zu beheben, könnte dies jedoch ein wenig langweilig werden.
Beachten Sie, dass Sie, wenn Sie das Segment /user/:id
an eine Komponente weiterleiten, die einige Daten über den Benutzer anzeigen muss und diese Benutzerdaten auch in den untergeordneten Komponenten benötigen, die erste Option auswählen sollten. Es macht keinen Sinn, mehrere Aufrufe an dieselben Daten zu senden.
Sollen untergeordnete Komponenten nur auf den Dienst zugreifen, um die gleichen Daten zu erhalten (zwischengespeichert)?
Ja, für die gleiche Strecke, absolut. Das spart Bandbreite und Serverressourcen. Darüber hinaus könnte es gefährlich sein, da der Server bei jeder nachfolgenden Anfrage möglicherweise andere Daten sendet (zumindest, wenn Sie keine Version des angeforderten Dokuments angeben). Wenn der Benutzer eine neue Route auslöst, wählen Sie selbst, ob Sie zwischengespeicherte Daten präsentieren oder den Server nach einem Update fragen.
Ich denke, ich hatte ein ähnliches Dilemma, und hier geht es um diese Art von Situationen.
1. Ziel & amp; Eingabeparameter
Wenn ich die Aufteilung in eine untergeordnete Komponente aus der Hauptkomponente machen will, werde ich versuchen zu sehen, ob das eine andere Art von Systemobjekt ist oder nicht (im Grunde, wenn ich ein vollständiges Routing dafür benötige oder ich meine Datenverbindung lösen kann) Verwenden Sie nur eine Eigenschaft als Ziel / Eingabe) Vergiss nicht:
Angular besteht darauf, dass wir eine Zieleigenschaft als Eingabe deklarieren Eigentum. Wenn nicht, lehnt Angular die Bindung ab und wirft ein Fehler.
Lesen Sie Teil 3 aus dem ng2-Lernprogramm: Ссылка
1. Routing
Für verschiedene Komponenten können Sie eine neue Route definieren und dann mit zwei Methoden Daten in diese eingeben:
1.1. Aus Route Params und einem Service (Sie sollten eine Service-Methode für das Laden von Daten verwenden, auf diese Weise können Sie den Datenzugriff refaktorieren und die Komponente schlank und fokussiert auf die Unterstützung der Ansicht halten ) . Sollte die Route Parameter nur für Filter oder kleine Aufgaben Aufgaben und nicht für Datenübertragungen verwenden. Hier ist eine mögliche Komponente:
Object1Routes
%Vor%Object1Edit
%Vor%1.2. Nur von einem Service
Object1Routes
%Vor%Object1List
%Vor%Ich hoffe, das wird helfen. Lass mich deine Gedanken wissen, wenn du eine andere Meinung hast oder etwas verpasst hast.
Der bereitgestellte Code basiert auf Angular 2.0.0-rc.2 und @ Angular / Router 3.0.0-alpha.7.
Lesen Sie auch diesen Artikel zum Prinzip der einfachen Verantwortung : Ссылка
Tags und Links angular angular2-routing