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
router.events.forEach((event) => {
console.log(event);
});
Trotzdem können Sie auch mit "NavigationStart" keine vorherige URL erhalten.
Jetzt müssen Sie paarweise verwenden.
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/pairwise';
constructor(private router: Router) {
this.router.events
.filter(e => e instanceof RoutesRecognized)
.pairwise()
.subscribe((event: any[]) => {
console.log(event[0].urlAfterRedirects);
});
}
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 in
import { filter, pairwise } from 'rxjs/operators';
this.router.events
.pipe(filter((evt: any) => evt instanceof RoutesRecognized), pairwise())
.subscribe((events: RoutesRecognized[]) => {
console.log('previous url', events[0].urlAfterRedirects);
console.log('current url', events[1].urlAfterRedirects);
});