Dla każdego, kto tak jak ja, znalazłby to pytanie, przydatne mogą być następujące informacje.
Miałem podobny problem i początkowo próbowałem użyć location.go i location.replaceState, jak sugerowano w innych odpowiedziach tutaj. Jednak napotkałem problemy, gdy musiałem przejść do innej strony w aplikacji, ponieważ nawigacja była względna do bieżącej trasy, a bieżąca trasa nie była aktualizowana przez location.go lub location.replaceState (router nic nie wie o tym, co robią z adresem URL)
Zasadniczo potrzebowałem rozwiązania, które NIE WADZI przeładowywania strony / komponentu, gdy zmienił się parametr trasy, ale NIE zaktualizował stanu trasy wewnętrznie.
Skończyło się na parametrach zapytania. Więcej na ten temat można znaleźć tutaj: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Więc jeśli chcesz zrobić coś takiego, jak zapisać zamówienie i uzyskać identyfikator zamówienia, możesz zaktualizować adres URL swojej strony, jak pokazano poniżej. Aktualizacja lokalizacji centrum i powiązanych danych na mapie byłaby podobna
// 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.
}
i śledzisz to w ramach metody ngOnInit, np .:
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]
}
Jeśli chcesz przejść bezpośrednio do strony zamówienia z nowym (niezapisanym) zamówieniem, możesz zrobić:
this.router.navigate(['orders']);
Lub jeśli chcesz przejść bezpośrednio do strony zamówienia istniejącego (zapisanego) zamówienia, możesz zrobić:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });