Có thể tất cả các câu trả lời khác dành cho góc 2.X.
Bây giờ nó không hoạt động cho góc 5.X. Tôi đang làm việc với nó.
chỉ với NavigationEnd, bạn không thể lấy url trước đó.
vì Router hoạt động từ "NavigationStart", "RoutesRecognized", ..., thành "NavigationEnd".
Bạn có thể kiểm tra với
router.events.forEach((event) => {
console.log(event);
});
Nhưng bạn vẫn không thể nhận được url trước đó ngay cả với "NavigationStart".
Bây giờ bạn cần sử dụng ghép nối.
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);
});
}
Với từng cặp, Bạn có thể xem url là từ và đến.
"RoutesRecognized" là bước thay đổi từ url gốc đến url đích.
vì vậy hãy lọc nó và lấy url trước đó từ nó.
Cuối cùng nhưng không kém phần quan trọng,
đặt mã này trong thành phần chính hoặc cao hơn (ví dụ: app.component.ts)
vì mã này kích hoạt sau khi kết thúc định tuyến.
Cập nhật góc 6+
Các events.filter
cho lỗi vì bộ lọc không phải là một phần của sự kiện, vì vậy thay đổi mã để
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);
});