Für jemanden wie mich, der diese Frage findet, könnte das Folgende nützlich sein.
Ich hatte ein ähnliches Problem und versuchte zunächst, location.go und location.replaceState zu verwenden, wie in anderen Antworten hier vorgeschlagen. Ich hatte jedoch Probleme, als ich zu einer anderen Seite in der App navigieren musste, da die Navigation relativ zur aktuellen Route war und die aktuelle Route nicht durch location.go oder location.replaceState aktualisiert wurde (der Router weiß nichts darüber, was diese mit der URL machen)
Im Wesentlichen brauchte ich eine Lösung, die die Seite / Komponente NICHT neu lud, wenn sich der Routenparameter änderte, sondern den Routenstatus intern aktualisierte.
Am Ende habe ich Abfrageparameter verwendet. Weitere Informationen finden Sie hier: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Wenn Sie also beispielsweise eine Bestellung speichern und eine Bestellnummer erhalten müssen, können Sie Ihre Seiten-URL wie unten gezeigt aktualisieren. Das Aktualisieren eines Zentrumsstandorts und zugehöriger Daten auf einer Karte wäre ähnlich
// 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.
}
und Sie verfolgen es innerhalb der ngOnInit-Methode wie folgt:
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]
}
Wenn Sie mit einer neuen (nicht gespeicherten) Bestellung direkt zur Bestellseite gehen müssen, haben Sie folgende Möglichkeiten:
this.router.navigate(['orders']);
Wenn Sie für eine vorhandene (gespeicherte) Bestellung direkt zur Bestellseite wechseln müssen, haben Sie folgende Möglichkeiten:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });