import { Injectable } from '@angular/core'; import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'; import { finalize, Observable } from 'rxjs'; import { DataService } from '../services/data.service'; @Injectable() export class LoaderInterceptor implements HttpInterceptor { private tasks: number = 0; constructor( private _data: DataService ) { } intercept(request: HttpRequest, next: HttpHandler): Observable> { this.addTask(); return next.handle(request).pipe( finalize(() => { this.removeTask(); }) ); } addTask() { this.tasks++; if (this.tasks === 1) { this._data.showLoader.next(true); } } removeTask() { this.tasks--; if (this.tasks === 0) { this._data.showLoader.next(false); } } }