Nếu bạn sử dụng
router.navigate
Và sau đó
location.replaceState
Với cùng một đường dẫn chính xác, bạn có thể kích hoạt các thay đổi thường xảy ra, cũng như thay thế lịch sử.
Ví dụ, trong trường hợp của bạn:
this.router.navigate(['questions/1']);
this.location.replaceState('questions/1');
Nếu bạn cần phải thêm tham số cho các tuyến đường, bạn có thể tạo ra các url đối với vị trí sử dụng
router.serializeUrl(router.createUrlTree(/* what you put in your router navigate call */));
Trong ví dụ của bạn:
this.router.navigate(['questions/1', {name:"test"}]);
this.location.replaceState(this.router.serializeUrl(this.router.createUrlTree(['questions/1', {name:"test"}])));
Cập nhật
Có vẻ như bộ định tuyến góc bây giờ đi kèm với một replace url option. Trong ví dụ của bạn:
this.router.navigate(["questions/1"], {replaceUrl:true});
Cập nhật 2
Có một hiện issue nơi nhiều điều hướng thực hiện trong một khoảng thời gian ngắn có thể không thay thế các URL chính xác. Là một workaround tạm thời, quấn chức năng điều hướng trong một thời gian chờ để có được mỗi bắn trong một chu kỳ riêng biệt:
setTimeout(()=>{
this.router.navigate(["questions/1"], {replaceUrl:true});
});
Bạn đã thử 'canDeactivate' bảo vệ cho tuyến đường của bạn '/ câu hỏi/1'? Chỉ cần kiểm tra đích mong muốn, nếu nó là '../add', chuyển hướng đến '/ questions'? Hoặc thực hiện 'canActivate' cho '../add' route thay thế .. –
quá phức tạp. tôi có hàng trăm nơi mà tôi cần hành vi và bảo vệ này với các chuyển hướng chỉ là các bản vá lỗi khỉ sẽ tạo ra rất nhiều mã – pleerock