Ich verwende Angular 2.1 für eine große Anwendung, die mehrere Submodule hat, die jeweils Sub-Anwendungen nach Feature definieren. Das Modul der obersten Ebene konfiguriert das RouterModul mit allen untergeordneten Routen für die gesamte Anwendung, indem es die Routen jeder untergeordneten Anwendung usw. importiert. Aus der Perspektive der Unteranwendung leitet es also relativ zu der Anwendung, für die die Anwendung der höchsten Ebene die Route festlegt Die Unteranwendung weiß nicht direkt, was ihre oberste Route tatsächlich ist.Angular2-Routing zwischen Unteranwendungen in Modulen
Einige dieser Unteranwendungen verfügen über Zusammenfassungsbereiche für Einheiten, die in einer anderen Unteranwendung vollständiger definiert/gesteuert werden. Konzeptionell sind die Module Setup wie folgt aus:
Module 1:
Imports Module 2
Routes for Module 1
Component1A
App1View (contains Component1A, M2SummaryComponent)
Module 2:
Routes for Module 2 (one exported as APP2_VIEW_ROUTE, type Route)
Component2A
Component2B
M2SummaryComponent
App2View (contains Component2A, Component2B)
...etc.
Ich bin für ein Design-Muster suchen, wobei die M2SummaryComponent geschrieben werden kann, um eine Strecke innerhalb des eigenen Modul zu verbinden, während es in App1View Modul 1 des instanziiert wird, ohne zu hart mit - Routen irgendwie manuell ordern oder neu zusammenstellen.
Ich hatte gehofft, dass dies ein allgemein genug Problem war, das das Angular-Team wahrscheinlich möglich gemacht hat mit etwas wie router.navigate([APP2_VIEW_ROUTE, ...other params])
, wo man einfach das Route-Objekt übergeben kann RouterModule passend zum gewünschten Pfad verwendet. Mit Blick auf den Quellcode scheint dies jedoch keine Option zu sein. Stattdessen haben wir Beispiele für ActivatedRoute.
Das Problem mit ActivatedRoute (this.route
unten) ist, dass es relativ zu App1View wird. Der Versuch, router.navigate(['m2SpecialId'],{relativeTo: this.route})
zu verwenden, ist ein Nicht-Starter, da es relativ zu dem Pfad ist, der uns zu App1View brachte, nicht zurück zu der bevorzugten Route von Modul 2 zu App2View. Die einzige andere, etwas elegante Route (Wortspiel) um diese Probleme, soweit ich das beurteilen kann, würde darin bestehen, das Modul jeder Unteranwendung als ModuleWithProviders zu importieren, so dass man optional das Modul des Moduls informieren kann Top-Level-Route auf seinen Zustand angewendet. Schreiben Sie dann Hilfsfunktionen auf, die URIs für diese Unteranwendung mithilfe der definierten Routen zusammenstellen.
Das fühlt sich sehr Kesselplatte ... wie vielleicht die Lösung oder Design-Muster bereits im Rahmen existiert, daher diese Frage.
Frage:
Gibt es ein Entwurfsmuster der Angular2 Router für die Verwendung, die Komponenten in andere Module importiert erlauben würde, sauber ihre eigenen Moduls vorkonfigurierte Routen verweisen, während eine flexible Top-Level-Route Definition beibehalten?
Tatsächlich habe ich meinen Beitrag vergessen. Ab der aktuellen Version von Angular (4.0.x) ist dies der richtige Weg. Als ich im Oktober letzten Jahres zurückkam, war Angular ein 2.0-ish und meine Standardmethode schien der einzig praktikable Weg nach vorne zu sein. – Thomas