首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Httpinterceptor加载屏幕

Httpinterceptor加载屏幕
EN

Stack Overflow用户
提问于 2019-07-12 21:50:35
回答 2查看 60关注 0票数 1

我有一个http拦截器,它可以在处理http请求时打开和关闭加载覆盖。它通过激活在app.component.ts中订阅共享服务来实现这一点,这实际上切换了css。

问题是,当请求进出时,一个请求的overlay off操作可能会关闭加载屏幕,而另一个请求仍在进行。我理解为什么会发生这种情况,但我真的想不出一个方法来解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-13 02:09:53

要做到这一点,一种简单的方法是使用counter跟踪正在等待处理的请求的数量。

当执行请求时,增加计数器,当HttpResponse类型的响应到达时,减少计数器。

当计数器达到0时,移除overly,否则保留它,直到它达到值0为止。

Ps:您可以以链接拦截器的完整代码为例。

票数 1
EN

Stack Overflow用户

发布于 2019-07-12 22:04:40

您可以使用数组来保存“正在运行的作业”。您的每个组件、服务可观察值都可以作为唯一的字符串"key“添加到服务中的数组中。

代码语言:javascript
复制
.
.
.
runningObservables: string[] = []
.
.
.
private addObservable(name: string) {
    this.runningObservables.push(name);
  }

  private removeObservable(name: string) {
    const index = this.runningObservables.indexOf(name);
    if (index > -1) {
      this.runningObservables.splice(index, 1);
    }
  }

然后在你的组件中使用类似的东西。

代码语言:javascript
复制
<app-spinner [isShown]="runningObservables.length > 0"></app-spinner>

在subscrive/complete方法中添加和删除条目。

可观察性的简化版本。

代码语言:javascript
复制
this.addObservable('getChangeRequestTypes');
    this.changeRequestsService.getChangeRequestTypes()
      .subscribe(
        db => {
          this.removeObservable('getChangeRequestTypes');
          this.changeRequestTypes = db;
        },
        error => console.log(error),
        () => { });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57008348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档