Возможно, все остальные ответы относятся к angular 2.X.
Теперь это не работает для angular 5.X. Я работаю с этим.
с помощью только NavigationEnd вы не можете получить предыдущий URL.
потому что Маршрутизатор работает от "NavigationStart", "RoutesRecognized", ... до "NavigationEnd".
Вы можете проверить с
router.events.forEach((event) => {
console.log(event);
});
Но вы все равно не можете получить предыдущий URL даже с "NavigationStart".
Теперь нужно использовать попарно.
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);
});
}
С попарно вы можете увидеть, откуда и куда идет URL.
«RoutesRecognized» - это переход от исходного URL к целевому.
так что отфильтруйте его и получите от него предыдущий URL.
Последний, но тем не менее важный,
поместите этот код в родительский компонент или выше (например, app.component.ts)
потому что этот код запускается после завершения маршрутизации.
Обновление angular 6+
events.filter
Дает ошибку , потому что фильтр не является частью событий, поэтому изменить код на
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);
});