ただ、この質問のために、私はローダーの作成を通過するつもりはない、とちょうどあなたが迎撃に既存のローダーを実装する方法をについて話しています。電話をかけるたびに、intercept()
関数が呼び出されます。つまり、intercept()
関数の開始時に、呼び出しが行われたかどうか、および完了したかどうかに基づいて、ローダーを表示および非表示にするための注入されたLoaderService
ジョブを使用してローダーを表示する必要があります。
constructor(private loaderService: LoaderService) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.loaderService.show();
const authReq = req.clone({
headers: req.headers.set('Authorization', 'token')
});
return next.handle(authReq);
}
次に、呼び出しが完了した後にローダーが非表示になっていることを確認する必要があります。 do
オペレータでこれを行うことができます。
return next.handle(authReq)
.do(
(response) => {
if (response instanceof HttpResponse) {
this.loaderService.hide();
}
},
(error) => {
this.loaderService.hide();
});
do
オペレータインポートするようにしてください:あなたはif (event instanceof HttpResponse)
チェックしなければならないのはなぜimport "rxjs/add/operator/do";
を?これは、HttpInterceptor
がALL HttpEvent
をインターセプトするためです。これにはHttpSentEvent
,HttpProgressEvent
などが含まれますが、これらのイベントの受信時にローダーを非表示にしたくない場合があります。実際に応答を受け取った場合にのみもちろん、エラーが発生した場合は、ローダーを非表示にします。 do
ブロックに応答を受け取ったら、他のプロセスを実行することもできます。たとえば、Authトークンをどこかに格納します。
独自のローダーを作成する方法については、articleが見つかりました。ローダーの作成と実装の手順を実行します。これをローダーの作成のガイドとして使用することができます。カスタムHttpService
で実装する部分は無視してもかまいません。新しくAngular HttpClient
を使用しているので、その必要がないからです。
これは、さまざまな方法で実行できます。まだローダを作成しましたか?私たちは正確に何をしていますか?インターセプタだけを表示するという事実は、あなたがローダーを持っていると仮定してくれますか? –
@JunKang。未だに – Joseph