Para cualquier persona como yo que encuentre esta pregunta, la siguiente puede ser útil.
Tuve un problema similar e inicialmente intenté usar location.go y location.replaceState como se sugiere en otras respuestas aquí. Sin embargo, tuve problemas cuando tuve que navegar a otra página en la aplicación porque la navegación era relativa a la ruta actual y la ruta actual no estaba siendo actualizada por location.go o location.replaceState (el enrutador no sabe nada sobre lo que le hacen a la URL)
En esencia, necesitaba una solución que NO recargara la página / componente cuando cambiaba el parámetro de ruta, pero sí actualizaba el estado de la ruta internamente.
Terminé usando parámetros de consulta. Puede encontrar más información al respecto aquí: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Entonces, si necesita hacer algo como guardar un pedido y obtener un ID de pedido, puede actualizar la URL de su página como se muestra a continuación. Actualizar la ubicación de un centro y los datos relacionados en un mapa sería similar
// 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.
}
y lo rastrea dentro del método ngOnInit como:
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]
}
Si necesita ir directamente a la página del pedido con un pedido nuevo (no guardado), puede hacer lo siguiente:
this.router.navigate(['orders']);
O si necesita ir directamente a la página de pedidos de un pedido existente (guardado), puede hacer lo siguiente:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });