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?
Aktualisieren
Im neuen Router V3 können Sie Wächter verwenden, wie in Ссылка
erklärtOriginal
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()
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);
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.
Tags und Links angular angular-ui-router