Đối với bất kỳ ai như tôi tìm thấy câu hỏi này, những điều sau có thể hữu ích.
Tôi đã gặp sự cố tương tự và ban đầu đã thử sử dụng location.go và location.replaceState như được đề xuất trong các câu trả lời khác tại đây. Tuy nhiên, tôi đã gặp phải sự cố khi phải điều hướng đến một trang khác trên ứng dụng vì điều hướng liên quan đến tuyến đường hiện tại và tuyến đường hiện tại không được cập nhật bởi location.go hoặc location.replaceState (bộ định tuyến không biết gì cả về những gì chúng làm với URL)
Về bản chất, tôi cần một giải pháp KHÔNG tải lại trang / thành phần khi tham số tuyến thay đổi nhưng DID cập nhật trạng thái tuyến trong nội bộ.
Tôi đã kết thúc bằng cách sử dụng các tham số truy vấn. Bạn có thể tìm thêm về nó tại đây: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Vì vậy, nếu bạn cần làm điều gì đó như lưu đơn hàng và lấy ID đơn hàng, bạn có thể cập nhật URL trang của mình như hình dưới đây. Cập nhật vị trí trung tâm và dữ liệu liên quan trên bản đồ sẽ tương tự
// 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.
}
và bạn theo dõi nó trong phương thức ngOnInit như:
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]
}
Nếu bạn cần đi thẳng đến trang đặt hàng với một đơn hàng mới (chưa được lưu), bạn có thể thực hiện:
this.router.navigate(['orders']);
Hoặc nếu bạn cần truy cập trực tiếp vào trang đặt hàng cho một đơn hàng hiện có (đã lưu), bạn có thể thực hiện:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });