Mungkin semua jawaban lainnya adalah untuk sudut 2.X.
Sekarang tidak berfungsi untuk sudut 5.X. Saya sedang mengerjakannya.
hanya dengan NavigationEnd, Anda tidak bisa mendapatkan url sebelumnya.
karena Router bekerja dari "NavigationStart", "RoutesRecognized", ..., hingga "NavigationEnd".
Anda bisa mengeceknya dengan
router.events.forEach((event) => {
console.log(event);
});
Tapi tetap saja Anda tidak bisa mendapatkan url sebelumnya bahkan dengan "NavigationStart".
Sekarang Anda perlu menggunakan berpasangan.
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);
});
}
Dengan berpasangan, Anda dapat melihat asal dan tujuan url.
"RoutesRecognized" adalah langkah perubahan dari asal ke url target.
jadi filter dan dapatkan url sebelumnya darinya.
Terakhir tapi bukan yang akhir,
letakkan kode ini di komponen induk atau yang lebih tinggi (mis., app.component.ts)
karena kode ini aktif setelah perutean selesai.
Perbarui sudut 6+
The events.filter
memberikan kesalahan karena filter bukan bagian dari acara, sehingga mengubah kode untuk
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);
});