Nach einem Artikel auf Angular 2 Benutzerdefinierte HTTP-Dienst here: die auch eine andere benutzerdefinierte http-Fehler-Service zur Behandlung von http-Fehlercodes und Bildschirm neu laden, Code für diesen Dienst ist hier:Angular 2 benutzerdefinierte http Fehler Handler Service Injection Problem während bootstrap Phase
@Injectable()
export class HttpErrorHandler {
constructor(
private apiGateway: ApiGateway
) {
apiGateway.errors$.subscribe(
(value: any) => {
console.group("HttpErrorHandler");
console.log(value.status, "status code detected.");
console.dir(value);
console.groupEnd();
// If the user made a request that they were not authorized
// to, it's possible that their session has expired. Let's
// refresh the page and let the server-side routing move the
// user to a more appropriate landing page.
if (value.status === 401) {
window.location.reload();
}
});
}
}
Was ich versuche, ist auf 401 Fehler Umleitung zu erreichen Route einloggen mit:
router.navigate(['Login']);
Allerdings, wenn ich Router-Dienst in HttpErrorHandler injizieren Service, den ich einige Injektionsfehler bekommen.
Error: EXCEPTION: Error during instantiation of Token RouterPrimaryComponent! (Token Application Initializer -> HttpErrorHandler -> Router -> RouteRegistry -> Token RouterPrimaryComponent)
Hinweis: über HttpErrorHandler während Bootstrap-Phase der Anwendung wie folgt konfiguriert:
bootstrap(AppComponent, [
HTTP_PROVIDERS,
ROUTER_PROVIDERS,
ApiGateway,
FriendService,
HttpErrorHandler,
//
// Make sure our "unused" services are created via the
// APP_INITIALIZER token
//
provide(APP_INITIALIZER, {
useFactory: (httpErrorHandler) => {
console.info("HttpErrorHandler initialized.");
},
deps: [HttpErrorHandler]
})
]);
nicht sicher, ob ich Router-Dienst ganz früh in dem Anwendungs-Lebenszyklus am injizieren. Gibt es eine Möglichkeit, den Router-Dienst in den HttpErrorHandler-Dienst zu injizieren, sodass die clientseitige Navigation verwendet werden kann?
Ich habe eine plnrr here erstellt, die den Fehler auch zeigt.
Nicht sicher, was meinst du mit mindestens einer Komponente, wenn HttpErrorHandler Factory Initialisierung während Bootstrap benötigt. Können Sie Ihre Idee auf dem oben angegebenen PLNKR bitte versuchen? Danke – Nexus23
Dies ist eine Fehlermeldung von Ihrem Plunkr, es sagt, dass Sie versuchen, 'Router' vor jeder' Komponente' zu instanziieren. Sie müssen 'HttpErrorHandler' nicht so früh erstellen, es wird bei Bedarf automatisch erstellt. Entferne diesen Code einfach. [plunkr] (http://pnnr.co/edit/GWuvkAZBawsGuLmf40JN?p=preview) – kemsky
Ich denke, Sie haben das oben erwähnte Problem und Details nicht verstanden. Es geht nicht darum, HttpErrorHandler während der Initialisierung zu entfernen. Wir können angepasste Factory während des Bootstrapping initialisieren, nicht auf der Komponentenebene. Das Problem, HttpErrorHandler auf Anwendungsebene zur Behandlung von http-bezogenen Fehlern verfügbar zu machen, ist eine perfekte Lösung, wie in dem betreffenden Artikel erwähnt. Das einzige, was ich erreichen wollte, war: router.navigate (['Login']); <= Dies erfordert einen Router-Dienst, der im HttpErrorHandler-Dienst verfügbar ist (das ist mein Problem). anstelle von window.location.reload(); – Nexus23