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:
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:
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.
Gibt es eine bessere Möglichkeit, mit der dargestellten Situation umzugehen?
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
gibtEDIT 1: Tippfehler behoben
Tags und Links angular typescript angular2-routing