角度2のカスタムhttpサービスhereの記事:httpエラーコードとリロード画面を処理する別のカスタムhttpエラーサービスを利用するこのサービスのコードは次のとおりです。私が達成しようとしています何ブートストラップフェーズ中に角2のカスタムHTTPエラーハンドラサービス注入の問題
@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();
}
});
}
}
は、使用してルートをログインする401エラーのリダイレクトである:
router.navigate(['Login']);
しかし、私はHttpErrorHandlerサービスにRouterサービスを注入するとき、私はいくつかの注入エラーが発生します。
Error: EXCEPTION: Error during instantiation of Token RouterPrimaryComponent! (Token Application Initializer -> HttpErrorHandler -> Router -> RouteRegistry -> Token RouterPrimaryComponent)
注:HttpErrorHandler上記は、このようなアプリケーションのブートストラップフェーズで構成されています
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]
})
]);
私はかなり初期のアプリケーションライフサイクルにおけるRouterサービスを注入していますかどうかわかりません。クライアント側のナビゲーションを使用できるように、HttpErrorHandlerサービスにRouterサービスを挿入する方法はありますか?
エラーを示すplnkr hereも作成しました。
ブートストラップ中にHttpErrorHandlerファクトリを初期化する必要があるときに、少なくとも1つのコンポーネントが何を意味するのか不明です。上記のplnkrであなたのアイデアを試してみてください。ありがとう – Nexus23
これはあなたのplunkrからのエラーメッセージです。これは、 'Component'の前に' Router'をインスタンス化しようとしていることを示しています。 'HttpErrorHandler'を早く作成する必要はなく、必要なときに自動的に作成されます。このコードを削除するだけです。 [plunkr](http://plnkr.co/edit/GWuvkAZBawsGuLmf40JN?p=preview) – kemsky
上記の問題や詳細を理解できていないと思います。初期化中にHttpErrorHandlerを削除することではありません。ブートストラップ時には、コンポーネントレベルではなく、カスタマイズしたファクトリを初期化できます。 http関連エラーを処理するためにアプリケーションレベルでHttpErrorHandlerを利用できるようにするには、問題の記事で説明したように完璧な解決策があります。私が達成したいのは、 router.navigate(['Login']); <=これはHttpErrorHandlerサービスで利用可能なルーターサービスを必要とします(これは私の問題です)。 の代わりに window.location.reload(); – Nexus23