Gibt es einen besseren Weg, in Angular2 Vorfahren-Routenparameter zu erhalten?

9

Ich muss Param von der Route bekommen, die nicht Elternteil und nicht einmal Großelternteil ist, es ist einfach irgendwo oben, auf dem Weg zur Wurzel. Ich kenne Ansätze, wie sie in Angular 2 dargestellt sind: RouteParams von der übergeordneten Komponente abrufen oder durch einen geteilten Dienst, aber eine Situation, in die ich mich hineinversetze (zumindest denke ich das), macht die Leute nicht gut dafür geeignet. Also hier ist, was ich habe:

Ich habe ein Untermodul geladen, das id vom übergeordneten Kontext benötigt. Situation sieht mehr oder weniger in Routing-Konfiguration wie folgt aus:

%Vor%

ModelsComponent muss alle Model Instanzen laden, die zu gegebenem Container gehören. Also entschied ich mich für .parent approach zu gehen, aber meine Zähne begannen nach dem Schreiben von 2% .parent zu schmerzen und es kam immer noch der dritte:

%Vor%

Shared Service ist irgendwie eine Option, aber aufgrund der Tatsache, dass das Kind-Modul faul geladen ist, müsste ich es in das Core-Modul einfügen, was es ziemlich global macht (was ich nicht mag).

Nach einigem Hin und Her kam ich zu folgendem Code, der einfach alle ActivatedRoute zur Wurzel nimmt, sie kombiniert, nach Param sucht und sie konsumiert. Ich mag es nicht, weil es meiner Meinung nach zu komplex, unlesbar und stinkt von einer Meile (oder mit anderen Worten, ist verdammt grausam) aber funktioniert und ich muss nicht darauf achten, ob sich die Verschachtelung ändert. Ich muss einfach sicherstellen, dass :containerId irgendwo auf dem Pfad zu root ist.

%Vor%

Gibt es eine bessere Möglichkeit, mit der dargestellten Situation umzugehen?

    
gaa 08.03.2017, 15:01
quelle

1 Antwort

4

Generell halte ich Ihren Ansatz für sinnvoll.

Ich kenne den genauen Hintergrund für den Code nicht, aber es fühlt sich an wie eine Kindkomponente, die viel über Elterninstanzdaten wissen möchte, und ich stimme mit @ Aravinds Kommentar überein, dass dies wahrscheinlich am besten im globalen Staatsmanagement gehandhabt wird Lösungen wie Redux oder ngrx. Wenn das alles ist, für das Sie es brauchen würden, verstehe ich, dass Sie diese Komplexitätsebene nicht einführen wollen.

Ich würde nur kleinere Anpassungen an Ihrer rxchain vornehmen, damit sie besser lesbar ist.

%Vor%

Beachten Sie jedoch, dass diese Implementierung nur diese.models setzt, wenn es eine containerId als Parameter für einen übergeordneten

gibt

EDIT 1: Tippfehler behoben

    
Ben Dadsetan 16.03.2017, 13:08
quelle