Może wszystkie inne odpowiedzi dotyczą Angular 2.X.
Teraz nie działa dla kątowej 5.X. Pracuję z tym.
mając tylko NavigationEnd, nie można uzyskać poprzedniego adresu URL.
ponieważ Router działa od „NavigationStart”, „RoutesRecognized”, ..., do „NavigationEnd”.
Możesz to sprawdzić
router.events.forEach((event) => {
console.log(event);
});
Ale nadal nie możesz uzyskać poprzedniego adresu URL, nawet z "NavigationStart".
Teraz musisz użyć parowania.
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);
});
}
Dzięki parowaniu możesz zobaczyć, jaki jest adres URL od i do.
„RoutesRecognized” to krok zmiany od początku do docelowego adresu URL.
więc przefiltruj go i pobierz z niego poprzedni adres URL.
Nie mniej ważny,
umieść ten kod w komponencie nadrzędnym lub wyższym (np. app.component.ts)
ponieważ ten kod jest uruchamiany po zakończeniu routingu.
Zaktualizuj kątową 6+
events.filter
Daje błąd, ponieważ filtr nie jest częścią wydarzeń, więc zmiany kodu do
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);
});