Mein Problem ist ziemlich klassisch. Ich habe einen privaten Teil einer Anwendung, der hinter a steht login form
. Wenn die Anmeldung erfolgreich ist, wird eine untergeordnete Route für die Administratoranwendung aufgerufen.
Mein Problem ist, dass ich das nicht verwenden kann, global navigation menu
weil der Router versucht, in meinem AdminComponent
statt in meinem zu routen AppCompoment
. Meine Navigation ist also kaputt.
Ein weiteres Problem ist, dass ich, wenn jemand direkt auf die URL zugreifen möchte, zur übergeordneten "Anmelderoute" umleiten möchte. Aber ich kann es nicht zum Laufen bringen. Mir scheint, dass diese beiden Themen ähnlich sind.
Irgendeine Idee, wie es gemacht werden kann?
angular
angular-routing
angular-router
Carl Boisvert
quelle
quelle
Antworten:
Möchten Sie einen Link / HTML oder möchten Sie zwingend / in Code routen?
Link : Die RouterLink-Direktive behandelt den bereitgestellten Link immer als Delta zur aktuellen URL:
Denken Sie bei RouterLink daran, das
directives
Array zu importieren und zu verwenden :Imperativ : Die
navigate()
Methode erfordert einen Startpunkt (dh denrelativeTo
Parameter). Wenn keine angegeben ist, ist die Navigation absolut:quelle
router.navigate(string)
Methode scheint in der aktuellen Version von Angular (2.2) nicht zu existieren. Ich habe in den Dokumenten gesucht und nur gefundennavigate(commands: any[], extras?: NavigationExtras) : Promise<boolean>
. Oder fehlt mir etwas total?relativeTo
Daten, wenn Sie [routerLink] im HTML-Code anstelle von Typoskript verwenden?Dies scheint für mich ab Frühjahr 2017 zu funktionieren:
Wo Ihre Komponente ctor akzeptiert
ActivatedRoute
undRouter
wie folgt importiert:import { ActivatedRoute, Router } from '@angular/router';
quelle
parentPath
'work: queue' (mit Kindern) und die Kinder laden das Kindermodul mit Parametern.fullCurrentPath
: 'Arbeit / Versand / Modul / Liste'. Der obige Code kann nicht geladenparentPath
ausfullCurrentPath
.Sie können so zu Ihrem übergeordneten Stamm navigieren
Sie müssen die aktuell aktive Route in den Konstruktor einfügen
quelle
this.router.navigate(['.'], {relativeTo: this.activeRoute.parent});
funktioniert die Navigationsmethode aus dieser Antwort in einem Fall ordnungsgemäß, wenn Sie dieselbe Komponente in zwei Pfaden verwenden: / users / create und / users / edit / 123. In beiden Fällen wird zu Eltern / Benutzern navigiert. Die reguläre Navigation mitthis.router.navigate([".."], {relativeTo: this.activeRoute})
funktioniert nur für die Benutzer / create, aber nicht für die Benutzer / edit / 123, da sie zu nicht vorhandenen / users / edit / route navigiert.Der Router unterstützt
/xxx
- gestartet auf dem Router der Root-Komponentexxx
- gestartet auf dem Router der aktuellen Komponente../xxx
- gestartet auf dem übergeordneten Router der aktuellen Komponentequelle
../
es gut genug bekannt ist, aber am Ende ist es immer noch mehrdeutig. Danke für den Tipp.So navigieren Sie zur übergeordneten Komponente, unabhängig von der Anzahl der Parameter in der aktuellen Route oder der übergeordneten Route: Angular 6-Update 21.01.19
Dies hat den zusätzlichen Vorteil, dass es sich um eine absolute Route handelt, die Sie mit dem Singleton-Router verwenden können.
(Angular 4+ sicher, wahrscheinlich auch Angular 2.)
quelle
this._router.navigate([])
beimthis._router.navigate([[]])
Übernehmen der übergeordneten Route, wenn und nur wenn die übergeordnete Route selbst nicht root ist.Ein anderer Weg könnte so sein
und hier ist der Konstruktor
quelle
ohne viel Aufhebens:
Parameter '..' macht die Navigation eine Ebene höher, dh Eltern :)
quelle
Meine Routen haben ein Muster wie das folgende:
Wenn ich zum Beispiel auf der Seite Bearbeiten bin und zur Listenseite zurückkehren muss, gebe ich 2 Ebenen auf der Route zurück.
Als ich darüber nachdachte, erstellte ich meine Methode mit einem "Level" -Parameter.
Um von der Bearbeitung zur Liste zu gelangen, rufe ich die Methode folgendermaßen auf:
quelle
Fügen Sie Ihrem Konstruktor den Speicherort von hinzu
@angular/common
Fügen Sie die Rückfunktion hinzu:
und dann aus Ihrer Sicht:
quelle
Wenn Sie die uiSref-Direktive verwenden, können Sie dies tun
quelle
Meine Lösung ist:
Und die
Router
Injektion:quelle