Для тех, кто, как я, нашел этот вопрос, может быть полезно следующее.
У меня была аналогичная проблема, и я сначала пытался использовать 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' } });