私は現在、angular2アプリケーション用にカスタムXHRBackend
を作成しようとしています。私はログインページでユーザーをリダイレクトするために401 http応答コード(無許可)ですべてのhttp応答をキャッチしたいと思います。しかし、ここに私の問題が来る:DIは私のカスタムバックエンドRouter
をロードすることができません。依存性注入がすべてのパラメータを読み込まない
@Injectable()
export class CustomXHRBackend extends XHRBackend {
constructor(
_browserXHR: BrowserXhr,
_baseResponseOptions: ResponseOptions,
_xsrfStrategy: XSRFStrategy,
private router : Router) {
super(_browserXHR, _baseResponseOptions, _xsrfStrategy);
console.log(router); // --> undefined
}
createConnection(request: Request) {
let xhrConnection = super.createConnection(request);
xhrConnection.response = xhrConnection.response.catch((error, caugth) => {
if(error.status === 401) {
//Do stuff with the new router
this.router.navigate(['/login']);
}
return Observable.throw(caugth);
});
return xhrConnection;
}
}
最初の3つのparamsが定義されているので、DIはまだ、XHRBackend
のメタデータを使用するように思えます。
私はこの問題を示しplunkrを、作成した:http://plnkr.co/edit/44imf9KpE06cIyQ395sg?p=preview
注:
plunkrがangular2ルータ例に基づいており、残念ながら私は小さなを作成するための十分な時間がありませんでした1。 重要なファイルはcustom.backend.ts
、おそらくmain.ts
です。
誰かがアイデアを持ちましたか、なぜこれが起こっていますか?
しかし、私はこれをすべてのHTTPメソッドで行う必要があります。あなたは一度だけそれをする方が良いと思いませんか? XHRBackendのみを使用します。 – Dinistro
これは、カスタムバックエンドに3つのパラメータ以外のものを注入できないという問題を解決しません。 – Dinistro
注入問題については、 'useFactory'を使って明示的なパラメータを指定する必要があると思います。私は自分の答えを更新しました。 –