Я сделал перехватчик для запроса http. Для каждого http-запроса показывается счетчик.
Но некоторые веб-запросы выполняются относительно быстро, в этом случае счетчик станет мерцанием на веб-странице.
Я хочу сделать некоторую задержку для прядильщик, но я понятия не имею, как.
Компонент прядильщика
<ng-container *ngIf="loading$ | async">
<mat-progress-bar mode="indeterminate" color='warn'>
</mat-progress-bar>
export class SpinnerComponent implements OnInit {
loading$;
constructor(private spinnerService: SpinnerService) { }
ngOnInit() {
this.loading$ = this.spinnerService.isLoading$
.pipe(
delay(0)
);
}
}
Обслуживание прядильщика
export class SpinnerService {
isLoading$ = new Subject<boolean>();
show() {
this.isLoading$.next(true);
}
hide() {
this.isLoading$.next(false);
}
}
Перехватчик Spinner
export class SpinnerInterceptor implements HttpInterceptor {
requestCount = 0;
constructor(private spinnerService: SpinnerService) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.requestCount++;
this.spinnerService.show();
return next.handle(request)
.pipe(
finalize(() => {
this.requestCount--;
if (this.requestCount === 0) {
this.spinnerService.hide();
}
})
);
}
}