我有一个组件用于加载屏幕的作用。我想在 api 调用期间显示它。
加载screen.component.html
<div *ngIf="isLoading | async" class="overlay">
//Some html for the loading screen.
</div>
加载屏幕.component.ts
isLoading: Subject<boolean> = this.loaderService.isLoading;
顺便说一句,当我将isLoading设置为真正的硬编码时,组件会淡入,我看到我的加载屏幕应该是这样的。所以我认为这个组件没有任何问题。
加载screen.interceptor.ts
@Injectable()
export class LoaderInterceptor implements HttpInterceptor {
constructor(public loaderService: LoadingScreenService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.loaderService.show();
return next.handle(req).pipe(
finalize(() => this.loaderService.hide())
);
}
}
我没有共享 api 调用,但它不应该是必要的,因为我看到在调试时进行 api 调用时触发了 show() 和 hide() 方法。
加载screen.service.ts
@Injectable({
providedIn: 'root'
})
export class LoadingScreenService {
isLoading = new Subject<boolean>();
constructor() { }
show() {
this.isLoading.next(true);
}
hide() {
this.isLoading.next(false);
}
}
app.module.ts
providers: [
LoadingScreenService,
{ provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true }
]