Angenommen, ich bin derzeit auf der Seite mit der URL /user/:id
. Von dieser Seite navigiere ich nun zur nächsten Seite :id/posts
.
Gibt es jetzt einen Weg, damit ich überprüfen kann, was die vorherige URL ist, dh /user/:id
.
Unten sind meine Routen
export const routes: Routes = [
{
path: 'user/:id', component: UserProfileComponent
},
{
path: ':id/posts', component: UserPostsComponet
}
];
angular
angular2-routing
Chandra Shekhar
quelle
quelle
null
daran, dass es keine vorherige Route gibt. Sie müssen dies auch auf dem Root-Router tun, da Sie dies sonst nur erhalten, wenn Sie zwischen untergeordneten Routen dieser Komponente navigieren.Vielleicht sind alle anderen Antworten für Winkel 2.X.
Jetzt funktioniert es nicht mehr für Angular 5.X. Ich arbeite damit.
Mit nur NavigationEnd können Sie keine vorherige URL erhalten.
weil der Router von "NavigationStart", "RoutesRecognized", ... bis "NavigationEnd" arbeitet.
Sie können mit überprüfen
Trotzdem können Sie auch mit "NavigationStart" keine vorherige URL erhalten.
Jetzt müssen Sie paarweise verwenden.
Mit paarweise können Sie sehen, von welcher URL sie stammt.
"RoutesRecognized" ist der Änderungsschritt vom Ursprung zur Ziel-URL.
Filtern Sie es also und holen Sie sich die vorherige URL.
Zu guter Letzt,
Fügen Sie diesen Code in die übergeordnete Komponente oder höher ein (z. B. app.component.ts).
weil dieser Code nach Beendigung des Routings ausgelöst wird.
Aktualisieren Sie Winkel 6+
Dies
events.filter
gibt einen Fehler aus, da der Filter nicht Teil von Ereignissen ist. Ändern Sie daher den Code inquelle
Erstellen Sie einen injizierbaren Service:
Dann verwenden Sie es überall, wo Sie es brauchen. Um die aktuelle Variable so schnell wie möglich zu speichern, muss der Dienst im AppModule verwendet werden.
quelle
@NgModule({ ..., providers: [RouterExtService]}) export class AppRoutingModule { }
routerExtService.getPreviousUrl()
Methode im Konstruktor eines Service auf, der in einer Komponente verwendet wird. Aus irgendeinem Grund wurde dies früher als das eigentliche Update aufgerufen. Das heißt, wir haben eine Timing-Abhängigkeit! Ich denke, es ist viel einfacher, Subject zu verwenden.let params = new HttpParams({fromString: retrieveURL}).set('name', 'victor') const paramsObject = params.keys().reduce((obj, key) => { obj[key] = params.get(key) return obj }, {}) this.router.navigate([paramsObject], { relativeTo: this.route })
Angular 6 aktualisierter Code zum Abrufen der vorherigen URL als Zeichenfolge.
quelle
Dies funktionierte bei mir in eckigen> = 6.x Versionen:
quelle
Ich benutze Angular 8 und die Antwort von @ franklin-pious löst das Problem. In meinem Fall kann die vorherige URL in einem Abonnement einige Nebenwirkungen verursachen, wenn sie mit einigen Daten in der Ansicht verknüpft ist.
Die Problemumgehung, die ich verwendet habe, bestand darin, die vorherige URL als optionalen Parameter in der Routennavigation zu senden.
Und um diesen Wert in der Komponente zu erhalten:
this.router und this.route werden in den Konstruktor jeder Komponente eingefügt und als @ angle / router-Mitglieder importiert.
quelle
Angular 8 & rxjs 6 in der Version 2019
Ich möchte die Lösung basierend auf anderen großartigen Lösungen teilen.
Erstellen Sie zuerst einen Dienst, um auf Routenänderungen zu warten und die letzte vorherige Route in einem Verhaltensthema zu speichern. Stellen Sie dann diesen Dienst in der Hauptkomponente app.component im Konstruktor bereit und verwenden Sie diesen Dienst, um die gewünschte vorherige Route abzurufen, wann immer Sie möchten.
Anwendungsfall: Sie möchten den Benutzer auf eine Werbeseite umleiten und ihn dann automatisch dorthin umleiten, woher er gekommen ist. Dazu benötigen Sie die letzte vorherige Route.
Stellen Sie den Service in app.module bereit
Injizieren Sie es in app.component
Verwenden Sie schließlich die gespeicherte vorherige Route in der gewünschten Komponente
quelle
FÜR ANGULAR 7+
Seit Angular 7.2 muss kein Dienst zum Speichern der vorherigen URL verwendet werden. Sie können einfach das Statusobjekt verwenden, um die letzte URL festzulegen, bevor Sie auf die Anmeldeseite verlinken. Hier ist ein Beispiel für ein Anmeldeszenario.
----------------Zusätzlich können Sie auch die Daten in der Vorlage übergeben:
quelle
@ GünterZöchbauer auch Sie können es in localstorage speichern, aber ich bevorzuge es nicht) besser im Service zu speichern und diesen Wert von dort zu erhalten
quelle
Sie können den Standort wie hier erwähnt verwenden .
Hier ist mein Code, wenn der Link auf einer neuen Registerkarte geöffnet wurde
Erforderliche Importe
quelle
Ziemlich einfach mit
previousNavigation
Objekt:quelle
Ich hatte einige Schwierigkeiten, innerhalb eines Wachmanns auf die vorherige URL zuzugreifen.
Ohne eine benutzerdefinierte Lösung zu implementieren, funktioniert diese für mich.
Die anfängliche URL ist die vorherige URL-Seite.
quelle
quelle
Alle oben genannten ANTWORTEN werden mehrmals als URL geladen. Wenn der Benutzer auch eine andere Komponente besucht hat, wird dieser Code geladen.
Also besser zu bedienen, Service-Erstellungskonzept. https://community.wia.io/d/22-access-the-previous-route-in-your-angular-5-app
Dies funktioniert in allen Versionen von Angular. (Bitte stellen Sie sicher, dass Sie es dem Provider-Array in Ihrer app.module-Datei hinzufügen!)
quelle
Mit paarweise von rxjx können Sie dies einfacher erreichen. {filter, pairwise} aus 'rxjs / operator' importieren;
}}
quelle
Ich hatte ein ähnliches Problem, als ich zur vorherigen Seite zurückkehren wollte. Die Lösung war einfacher als ich mir vorstellen konnte.
Und es kehrt zur übergeordneten URL zurück. Ich hoffe es wird jemandem helfen;)
quelle