我要做的是创建一个SpinnerService和一个spinnerchiptor,而不是将它们合并在一起。
使微调器服务分配未完成请求的数量,并在未完成请求大于0时显示微调器。
@Injectable()
export class SpinnerService {
private requestAmount$ = new BehaviorSubject(0);
public showSpinner$ = this.requestAmount$.asObservable().pipe(map(r => r > 0));
requestStart() {
this.requestAmount$.next(this.requestAmount$.getValue() + 1);
}
requestEnd() {
this.requestAmount$.next(this.requestAmount$.getValue() - 1);
}
}
@Injectable()
export class SpinnerInterceptor implements HttpInterceptor {
constructor(private spinnerService: SpinnerService) {}
intercept(req: HttpRequest<any>, next: HttpHandler) {
this.spinnerService.requestStart();
return next.handle(req).pipe(
finalize(() => {
this.spinnerService.requestEnd();
})
);
}
}
在应用程序组件中使用
ngOnInit
钩子不使用它与样式指南相反的构造函数。
export class AppComponent implements OnInit{
display = 'none';
constructor(public authenticationService: AuthenticationService,
public spinnerService: SpinnerService) {}
ngOnInit(){
this.spinnerService.showSpinner$.subscribe(visibility => {
console.log(visibility);
this.display = visibility ? 'block': 'none';
});
}
}
希望这有帮助!