สำหรับใครก็ตามเช่นฉันที่พบว่าคำถามต่อไปนี้อาจเป็นประโยชน์
ฉันมีปัญหาที่คล้ายกันและในตอนแรกได้ลองใช้ location.go และ location.replaceState ตามที่แนะนำในคำตอบอื่น ๆ ที่นี่ อย่างไรก็ตามฉันพบปัญหาเมื่อต้องไปที่หน้าอื่นในแอปเนื่องจากการนำทางสัมพันธ์กับเส้นทางปัจจุบันและเส้นทางปัจจุบันไม่ได้รับการอัปเดตโดย location.go หรือ location.replaceState (เราเตอร์ไม่รู้อะไรเลย เกี่ยวกับสิ่งเหล่านี้ทำกับ URL)
โดยพื้นฐานแล้วฉันต้องการโซลูชันที่ไม่ควรโหลดเพจ / ส่วนประกอบซ้ำเมื่อพารามิเตอร์เส้นทางเปลี่ยนไป แต่ DID อัปเดตสถานะเส้นทางภายใน
ฉันลงเอยด้วยการใช้พารามิเตอร์การค้นหา คุณสามารถดูข้อมูลเพิ่มเติมได้ที่นี่: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
ดังนั้นหากคุณต้องการดำเนินการบางอย่างเช่นบันทึกคำสั่งซื้อและรับรหัสคำสั่งซื้อคุณสามารถอัปเดต URL ของหน้าเว็บดังที่แสดงด้านล่าง การอัปเดตตำแหน่งศูนย์กลางและข้อมูลที่เกี่ยวข้องบนแผนที่จะคล้ายกัน
// let's say we're saving an order. Initally the URL is just blah/orders
save(orderId) {
// [Here we would call back-end to save the order in the database]
this.router.navigate(['orders'], { queryParams: { id: orderId } });
// now the URL is blah/orders?id:1234. We don't reload the orders
// page or component so get desired behaviour of not seeing any
// flickers or resetting the page.
}
และคุณติดตามมันภายในวิธีการ ngOnInit เช่น:
ngOnInit() {
this.orderId = this.route
.queryParamMap
.map(params => params.get('id') || null);
// orderID is up-to-date with what is saved in database now, or if
// nothing is saved and hence no id query paramter the orderId variable
// is simply null.
// [You can load the order here from its ID if this suits your design]
}
หากคุณต้องการไปที่หน้าคำสั่งซื้อพร้อมคำสั่งซื้อใหม่ (ยังไม่ได้บันทึก) คุณสามารถทำได้:
this.router.navigate(['orders']);
หรือหากคุณต้องการตรงไปที่หน้าคำสั่งซื้อสำหรับคำสั่งซื้อ (ที่บันทึกไว้) ที่มีอยู่คุณสามารถทำได้:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });