Per chiunque come me trovi questa domanda, potrebbe essere utile quanto segue.
Ho avuto un problema simile e inizialmente ho provato a utilizzare location.go e location.replaceState come suggerito in altre risposte qui. Tuttavia ho riscontrato problemi quando ho dovuto navigare in un'altra pagina dell'app perché la navigazione era relativa al percorso corrente e il percorso corrente non veniva aggiornato da location.go o location.replaceState (il router non sa nulla su cosa fanno all'URL)
In sostanza, avevo bisogno di una soluzione che NON ricaricasse la pagina / componente quando il parametro del percorso è cambiato, ma aggiornava internamente lo stato del percorso.
Ho finito per utilizzare i parametri di query. Puoi trovare ulteriori informazioni al riguardo qui: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Quindi, se devi fare qualcosa come salvare un ordine e ottenere un ID ordine, puoi aggiornare l'URL della tua pagina come mostrato di seguito. L'aggiornamento della posizione di un centro e dei dati correlati su una mappa sarebbe simile
// 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.
}
e ne tieni traccia all'interno del metodo ngOnInit come:
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]
}
Se devi andare direttamente alla pagina dell'ordine con un nuovo ordine (non salvato) puoi fare:
this.router.navigate(['orders']);
Oppure, se devi andare direttamente alla pagina dell'ordine per un ordine esistente (salvato) puoi fare:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });