Aktive Route kann nicht geladen / aktualisiert werden
Habe ich vor kurzem aktualisiert, um die neue RC3 und Router3alpha und es scheint, einige Dinge haben sich geändert.
Bemerkte ich, dass ein Klick auf den link einer aktiven route nicht mehr Ergebnis in die Komponente neu geladen werden. Wie kann ich erreichen, das Verhalten mit der neuen router3?
Mein link sieht so aus
<a [routerLink]="['/link1']">Link1</a>
Und um zu testen habe ich einfach verwendet, eine Zufallszahl in ngOnInit:
export class LinkoneComponent implements OnInit
{
public foo: number;
constructor() {}
ngOnInit()
{
this.foo = Math.floor(Math.random() * 100) + 1;
}
}
Funktioniert es ganz gut, wenn switiching zwischen Routen, aber ein Klick auf die derzeit aktive route nicht in einem laden der Komponente.
InformationsquelleAutor der Frage TommyF | 2016-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese wird derzeit nicht unterstützt. Wenn nur der parameter-Werte ändern, aber die Strecke bleibt die gleiche, die Komponente wird nicht neu erstellt.
Siehe auch https://github.com/angular/angular/issues/9811
Können Sie abonnieren params, um benachrichtigt zu werden, wenn die Parameter ändern zu re-initialisieren die Instanz der Komponente.
Siehe auch https://stackoverflow.com/a/38560010/217408
InformationsquelleAutor der Antwort Günter Zöchbauer
Eckige 2 rc7 - router 3.0
Ändern Sie die Basis-url in index.html zu
<script>document.write('<base href="/" />');</script>
InformationsquelleAutor der Antwort supersonic
Als Eckige 5.1 diese kann getan werden, mithilfe der
onSameUrlNavigation
Konfigurations-option, als Teil des integrierten Winkel-router. Es ist relativ einfach zu set-up und Los geht es zwar nicht klar aus der Dokumentation.
Das erste, was Sie tun müssen ist, setzen Sie die option in Ihrem
app.routing.ts
wenn Sie eine haben, oder die Datei wo die app routing konfiguriert ist.Gibt es zwei mögliche Werte für onSameUrlNavigation
'reload'
oderfalse
. Der Standardwert istfalse
die bewirkt, dass nichts passieren wird, wenn der router wird gebeten, zu navigieren, um die aktive route. Wir möchten, setzen Sie diesen Wert aufreload
. Es ist erwähnenswertreload
eigentlich nicht die Arbeit des Nachladens der Strecke, nur re-Trigger-Ereignisse auf die router, die wir dann brauchen, um Haken in.Um zu bestimmen, Wann diese events eigentlich gefeuert, müssen Sie die
runGuardsAndResolvers
Konfigurations-option, die auf Ihrer route. Dieser kann drei Werte...paramsChange
- nur feuern, wenn die route params geändert haben, z.B. wenn die id in/user/:id
änderungenparamsOrQueryParamsChange
- Feuer, wenn eine route param änderungen oder eine Abfrage param änderungen. z.B. dieid
oder dielimit
änderung der Eigenschaft in/user/:id/invites?limit=10
always
- Immer Feuer, wenn die route navigiert wirdWollen wir angeben immer in diesem Fall. Ein Beispiel route ist unten dargestellt.
Dass ist dein router konfiguriert ist. Der nächste Schritt ist, um tatsächlich die Ereignisse behandeln, die innerhalb einer Ihrer Komponenten. Sie müssen zum importieren der Router in Ihre Komponenten und Haken Sie dann in die Ereignisse. In diesem Beispiel habe ich eingehakt in die
NavigationEnd
Ereignis, das ausgelöst wird, sobald der router abgeschlossen hat seine navigation von einer route auf die nächste. Aufgrund der Art, wie wir die app konfiguriert haben, wird dieser nun sogar Feuer, wenn Sie versuchen, navigieren Sie zu der aktuellen route.Die schwerarbeit geht in die
initialiseInvites()
Methode, das ist, wo Sie zurücksetzen der Einstellungen auf Ihre Standardwerte zurück und Holen von Daten von Dienstleistungen, um die Komponente wieder in Ihren ursprünglichen Zustand.Müssen Sie wiederholen Sie diese Muster über jede Komponente, die Sie möchten in der Lage sein, um neu zu laden, wenn Sie angeklickt oder erfrischen Sie sich durch eine form der Schaltfläche aktualisieren klicken, werden Sie sicher, dass Sie die
runGuardsAndResolvers
option, um jede route in der routing-Datei.InformationsquelleAutor der Antwort Simon McClive
Winkel 2-4 aktuelle route neu laden hack
Für mich, mit dieser Methode funktioniert:
Können Sie diese Methode, um eine click-Ereignis für die aktuelle Komponente zu laden.
InformationsquelleAutor der Antwort indreed
Dies ist die beste hack, den ich schon in der Lage sein, um dieses lästige problem:
Dies funktioniert, aber es ist immer noch ein hack, und ich hasse es, dass die
Angular
team nicht einereload()
MethodeInformationsquelleAutor der Antwort Serj Sagan
InformationsquelleAutor der Antwort Muhammad Shahzad Anjum
Meiner bescheidenen Meinung nach könnten Sie die
window.location.reload()
im Typoskript.Auf diese Weise können Sie einfach und sicher, weil ein Teil des browser-Funktionalitäten.
InformationsquelleAutor der Antwort Signeus