Pour quiconque comme moi trouve cette question, ce qui suit pourrait être utile.
J'ai eu un problème similaire et j'ai d'abord essayé d'utiliser location.go et location.replaceState comme suggéré dans d'autres réponses ici. Cependant, j'ai rencontré des problèmes lorsque je devais naviguer vers une autre page de l'application car la navigation était relative à l'itinéraire actuel et l'itinéraire actuel n'était pas mis à jour par location.go ou location.replaceState (le routeur ne sait rien sur ce qu'ils font à l'URL)
En substance, j'avais besoin d'une solution qui ne rechargeait pas la page / le composant lorsque le paramètre d'itinéraire était modifié, mais DID mettait à jour l'état de l'itinéraire en interne.
J'ai fini par utiliser des paramètres de requête. Vous pouvez en savoir plus ici: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Donc, si vous devez faire quelque chose comme enregistrer une commande et obtenir un identifiant de commande, vous pouvez mettre à jour l'URL de votre page comme indiqué ci-dessous. La mise à jour d'un emplacement de centre et des données associées sur une carte serait similaire
// 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.
}
et vous en gardez une trace dans la méthode ngOnInit comme:
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 vous devez accéder directement à la page de commande avec une nouvelle commande (non enregistrée), vous pouvez faire:
this.router.navigate(['orders']);
Ou si vous devez accéder directement à la page de commande pour une commande existante (enregistrée), vous pouvez faire:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });