บางทีคำตอบอื่น ๆ ทั้งหมดอาจใช้สำหรับเชิงมุม 2.X
ตอนนี้มันใช้ไม่ได้กับมุม 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)
เนื่องจากรหัสนี้เริ่มทำงานหลังจากเสร็จสิ้นการกำหนดเส้นทาง
อัปเดตเชิงมุม 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);
});