Angular2 router.navigate () funktioniert nicht zum ersten Mal

8

Ich habe die folgenden Routen definiert:

%Vor%

Nutzer meiner App sehen basierend auf ihrer Rolle einschließlich ihrer "Landing" -Seite völlig unterschiedliche Seiten. Ich verwende meine HomeComponent, um den Nutzer basierend auf der folgenden Rolle auf die richtige Zielseite zu leiten:

%Vor%

Wenn HomeComponent nach der Anmeldung zum ersten Mal geladen wird, navigiert die Route nicht zum Beispiel zur Route "Sites", aber seltsamerweise löst sie die siteSummaries-Abhängigkeit auf. Nachdem es das erste Mal nicht umgeleitet wurde, kann ich zu einer anderen Route navigieren und dann versuchen, zur "Route" zu navigieren, und es wird korrekt auf die Route der Sites umgeleitet.

Warum funktioniert die anfängliche Navigation nicht? Basierend auf anderen ähnlichen Fragen über navigator () funktioniert nicht, habe ich versucht, meine Route zu "/ Sites" und "./sites" zu ändern, aber ohne Erfolg.

Aktualisieren Es sieht so aus, als ob es mit der Auflösung einer Abhängigkeit für eine Route zu tun hat. Wenn ich in meiner Funktion redirect() auf die Route 'error' umadressiere, wird es beim ersten Mal erfolgreich ausgeführt. Wenn ich meiner Route 'Fehler' eine resolve hinzufüge, kann sie nicht zum ersten Mal dorthin navigieren. Die seltsame Sache ist, dass der HTTP-Aufruf die Abhängigkeit erfüllt. Ist das ein Problem damit nicht warten auf die Rückkehr von navigate() Versprechen?

Update 2 Hier sind die angeforderten Klassen:

%Vor%

Update 3 Ich warf das in meine app.component :

%Vor%

Wenn die Route zum ersten Mal nicht geladen werden kann, gibt es zuerst eine Ereignisinstanz von NavigationStart und dann eine Instanz von NavigationCancel. Hier sehen Sie, wie das Ereignis auf dem NavigationCancel aussieht: {"id":2,"url":"/sites","reason":""} . Wie Sie sehen können, gibt es keinen Grund dafür ...

    
im1dermike 20.04.2017, 13:25
quelle

3 Antworten

4
___ qstnhdr ___ Angular2 router.navigate () funktioniert nicht zum ersten Mal ___ answer43678968 ___

Versuchen Sie dies für das Routing

%Vor%
    
___ answer43521061 ___

Sie sollten keine Dinge mit Nebenwirkungen im Konstruktor tun. Implementieren Sie stattdessen ngOnInit:

%Vor%

Siehe auch: Unterschied zwischen Konstruktor und ngOnInit

    
___ qstntxt ___

Ich habe die folgenden Routen definiert:

%Vor%

Nutzer meiner App sehen basierend auf ihrer Rolle einschließlich ihrer "Landing" -Seite völlig unterschiedliche Seiten. Ich verwende meine HomeComponent, um den Nutzer basierend auf der folgenden Rolle auf die richtige Zielseite zu leiten:

%Vor%

Wenn ngInit nach der Anmeldung zum ersten Mal geladen wird, navigiert die Route nicht zum Beispiel zur Route "Sites", aber seltsamerweise löst sie die siteSummaries-Abhängigkeit auf. Nachdem es das erste Mal nicht umgeleitet wurde, kann ich zu einer anderen Route navigieren und dann versuchen, zur "Route" zu navigieren, und es wird korrekt auf die Route der Sites umgeleitet.

Warum funktioniert die anfängliche Navigation nicht? Basierend auf anderen ähnlichen Fragen über navigator () funktioniert nicht, habe ich versucht, meine Route zu "/ Sites" und "./sites" zu ändern, aber ohne Erfolg.

Aktualisieren Es sieht so aus, als ob es mit der Auflösung einer Abhängigkeit für eine Route zu tun hat. Wenn ich in meiner Funktion %code% auf die Route 'error' umadressiere, wird es beim ersten Mal erfolgreich ausgeführt. Wenn ich meiner Route 'Fehler' eine %code% hinzufüge, kann sie nicht zum ersten Mal dorthin navigieren. Die seltsame Sache ist, dass der HTTP-Aufruf die Abhängigkeit erfüllt. Ist das ein Problem damit nicht warten auf die Rückkehr von %code% Versprechen?

Update 2 Hier sind die angeforderten Klassen:

%Vor%

Update 3 Ich warf das in meine %code% :

%Vor%

Wenn die Route zum ersten Mal nicht geladen werden kann, gibt es zuerst eine Ereignisinstanz von NavigationStart und dann eine Instanz von NavigationCancel. Hier sehen Sie, wie das Ereignis auf dem NavigationCancel aussieht: %code% . Wie Sie sehen können, gibt es keinen Grund dafür ...

    
___ tag123angular ___ Fragen zu Angular, dem Web-Framework von Google. Verwenden Sie dieses Tag für Angular-Fragen, die nicht für eine einzelne Version spezifisch sind. Verwenden Sie für das ältere AngularJS-Webframework (1.x) das angularjs-Tag. ___ antwort43792262 ___

Ich weiß immer noch nicht, warum es meine Routennavigation abbrach, aber ein Work around, den ich mir ausgedacht habe, ist, %code% auf Folgendes zu ändern:

%Vor%

Wenn ich meinen Redirect-Aufruf innerhalb eines Timeouts ablege, können die Dinge wie erwartet funktionieren, mit Ausnahme einer unmerklichen Verzögerung. Es scheint, es ist eine Art Timing-Problem? Wenn ich versuche, das Timeout auf 20 zu setzen, funktioniert es auch nicht.

    
___ tag123angular2routing ___ Das Angular Routing ist eine integrierte Funktion, mit der Sie eine SPA-Benutzeroberfläche (Single Page Application) erstellen können, mit der Benutzer zu verschiedenen Ansichten navigieren können, ohne die gesamte Seite jedes Mal neu vom Server laden zu müssen. ___
im1dermike 04.05.2017, 20:30
quelle
0

Sie sollten keine Dinge mit Nebenwirkungen im Konstruktor tun. Implementieren Sie stattdessen ngOnInit:

%Vor%

Siehe auch: Unterschied zwischen Konstruktor und ngOnInit

    
Tatsuyuki Ishi 20.04.2017 13:32
quelle
0

Versuchen Sie dies für das Routing

%Vor%
    
Arvind Audacious 28.04.2017 11:18
quelle

Tags und Links