아마도 다른 모든 대답은 각도 2.X에 대한 것입니다.
이제 각도 5.X에서는 작동하지 않습니다. 나는 그것으로 일하고있다.
NavigationEnd 만 있으면 이전 URL을 가져올 수 없습니다.
라우터는 "NavigationStart", "RoutesRecognized", ..., "NavigationEnd"에서 작동하기 때문입니다.
당신은 확인할 수 있습니다
router.events.forEach((event) => {
console.log(event);
});
그러나 여전히 "NavigationStart"를 사용해도 이전 URL을 가져올 수 없습니다.
이제 pairwise를 사용해야합니다.
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);
});
}
pairwise를 사용하면 어떤 URL이 시작되고 있는지 확인할 수 있습니다.
"RoutesRecognized"는 출발지에서 타겟 URL로 변경하는 단계입니다.
그래서 그것을 필터링하고 그것에서 이전 URL을 가져옵니다.
마지막으로,
이 코드를 상위 구성 요소 이상 (예 : app.component.ts)에 넣습니다.
이 코드는 라우팅을 마친 후에 실행되기 때문입니다.
각도 업데이트 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);
});