Angular 2 Router Event wird nicht zum ersten Mal ausgelöst?

9

Ich route von einer Komponente zur anderen. Sobald die Route fertig ist, möchte ich die URL der vorherigen Route verwenden. Ich habe den Code unten in den Constuctor der Komponente, an die geroutet wird, eingefügt, aber er feuert nicht auf der ersten Route. Nach der ersten Route wird die Funktion jedes Mal ausgelöst.

%Vor%

Wenn ich die paarweise Funktion entferne, scheint es auf der ersten Route zu feuern, aber es listet nur die aktuelle Route auf, nicht die vorherige Route.

%Vor%

Mein Ziel ist es, die vorherige Route wiederherzustellen, wenn die neue Komponente weitergeleitet wird. Was mache ich hier falsch?

    
David Aguirre 05.04.2017, 16:58
quelle

3 Antworten

1

Ich hatte genau das gleiche Szenario und ich fand heraus, dass es zu spät ist, zu abonnieren NavigationEnde paarweise im Konstruktor der Kindkomponente.

Sie können den Router in Ihrer Root-Komponente abonnieren und die Routendaten über einen Dienst wie das folgende Beispiel freigeben:

events.service.ts

%Vor%

app.component.ts (Ihre Root-Komponente)

%Vor%

Ihr-Ziel-route.ts

%Vor%

P.S. Es ist wichtig, ein BehaviorSubject oder ein ReplaySubject im Dienst, um das richtige vorherige Routenereignis für Ihr Kind zu erhalten Komponente abonniert nach dem Laden der Seite.

    
Dimitar Tachev 04.09.2017 11:28
quelle
0

Die Antwort wurde bereits gegeben: Das Ereignis NavigationEnd wurde bereits ausgelöst, als die Komponente es registriert. Ich mag die Idee von "Dimitar Tachev" nicht, um einen Workaround zu schaffen, indem ich diese Ereignisse durch ein Thema vermittele. In meinem Fall war die Lösung für:

  1. Lassen Sie die Komponente das NavigationEnd-Ereignis wie zuvor abonnieren.
  2. Veranlassen Sie, dass die Komponente den Anfangszustand aus dem injizierten Route-Objekt in der ngOnInit-Methode lädt.

Und schließlich ist eine andere Lösung, das Abonnement zu den Routenänderungsereignissen in den Konstruktor der Komponente zu verschieben.

    
TekTimmy 24.11.2017 14:28
quelle
-1

Ich bin gerade über dasselbe Problem gestolpert und habe den Grund dafür gefunden: Der Dienst, der die Router-Ereignisse abonniert hat, wurde niemals vom Dependency Injector eingerichtet, weil der Dienst auf dieser Route nicht injiziert wurde.

Ein Service scheint nur installiert zu sein, wenn er irgendwo injiziert wird.

Überprüfen Sie also Ihre erste Route, wenn der gesamte Code (nicht das Ereignis) jemals aufgerufen wird.

    
Normalo 29.06.2017 06:17
quelle

Tags und Links