angular 2 Route zu 404-Seite, wenn route param ungültig ist

8

Angenommen, ich habe eine Route mit einem solchen Parameter (in Angular 2): /user1/products/:id , der untergeordnete Routen wie /user1/products/3/reviews haben könnte.

Wenn ich zu /user1/products/-1 navigiere, überprüfe ich mit meinem Server und wenn das Produkt nicht existiert, möchte ich eine 404 Seite rendern, ohne den Browserverlauf zu beeinflussen.

Die Verwendung von router.navigate(['/404']) oder router.navigateByUrl('/404') scheint nicht zu funktionieren, da sowohl /user1/products/-1 als auch /404 zum Browserverlauf hinzugefügt werden.

Wenn ich die Zurück Taste im Browser drücke, gehe ich zurück zu /user1/products/-1 , was sofort zu /404 umgeleitet wird und ich bin im Wesentlichen bei /404 festgefahren.

In ExpressJS würden wir etwas wie next() tun, um die Anfrage an unseren 404-Handler zu übergeben. Gibt es in Angular 2 ein clientseitiges Äquivalent?

    
Simonxca 13.04.2016, 13:12
quelle

4 Antworten

6

Aktualisieren

Im neuen Router V3 können Sie Wächter verwenden, wie in Ссылка

erklärt

Original

Ich denke, Sie sollten @CanActivate () verwenden, um die Überprüfung durchzuführen. Wenn Sie in @CanActivate() weiterleiten, sollte die ungültige URL nicht zum Verlauf hinzugefügt werden (nicht versucht)

Siehe auch Ссылка für die Verwendung von DI in @CanActivate()

    
Günter Zöchbauer 13.04.2016, 13:16
quelle
3

Ok, das ist bereits implementiert, nur nicht gut dokumentiert.

Laut den Dokumenten:
router.navigateByUrl(url: string, _skipLocationChange?: boolean) : Promise<any>

Hat einen Parameter _skipLocationChange, der den Verlauf nicht ändert.
Diese werden den Trick machen:

router.navigateByUrl('/404', true); router.navigateByInstruction(router.generate(['/404']), true);

    
Simonxca 13.04.2016 20:31
quelle
3

Ab Angular 2 final ist dies die Lösung:

%Vor%     
AJT_82 25.12.2016 13:14
quelle
0

Seine wirklich interessante Frage, vielleicht sollten Sie es als Feature-Anfrage melden. Ich wäre nett, Zugriff auf Router-Anweisungen in loader Callback von RouteDefinition zu haben.

Sie könnten versuchen, die Validierung zu emulieren, indem Sie die Standardroute /** hinzufügen und den Parameter regex von RouteDefinition verwenden, um nur positive Zahlen zu finden.

    
kemsky 13.04.2016 16:18
quelle

Tags und Links