等待可观察到的RxJS时在Angular中显示加载指示器

杰里米

我有一个Angular组件,它侦听要更改用户ID的route参数,并在加载时加载用户详细信息。用户详细信息需要花费几秒钟的时间才能从API返回数据。

如果我正在查看用户A的详细信息,然后单击以查看用户B的详细信息,它将继续显示用户A,直到我单击几秒钟后返回用户B的详细信息。有什么办法可以显示正在加载的指示器,或者在为用户B检索数据时将其全部清空?

用户详细信息组件:

ngOnInit(): void {
  this.userDetails = this.route.paramMap.pipe(
    switchMap((params: ParamMap) => this.userService.getUserDetails(+params.get('userId')))
  );
}

用户详细信息模板:

<div *ngIf="userDetails | async as userDetails">
  <h1>{{userDetails.firstName}} {{userDetails.lastName}}</h1>
</div>

我希望用户详细信息div为空白或显示某种加载指示器(如果该内部switchMap当前正在运行)。我知道一个选择是将一个加载变量设置为true,在switchMap之前设置为true,在switchMap之后设置为false,并在div的* ngIf中使用该变量,但我希望可以采用一种简便的方法为这些情况中的每一种加载变量。

我有一个StackBlitz示例:https ://stackblitz.com/edit/angular-ng-busy-yxo1gu

目的是当我单击用户B按钮时,在加载用户B时用户A信息应消失。我的应用程序中有数十种这种情况,因此我正在寻找最干净的方法。

马丁

如果只希望内容消失,则可以在例如null开始获取其他用户时发出

this.userDetails = this.userId.asObservable().pipe(
  switchMap(id => merge(
    of(null),
    this.getUserDetails(id)
  )),
);

merge可观察到的创建方法将重新发射EMITnull然后等待,直到getUserDetails完成。您甚至不需要ng-busy它。

您更新的演示:https : //stackblitz.com/edit/angular-ng-busy-vwteyf?file= src/app/ app.component.ts

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

RxJs数组可观察到的数组

Redux-等待诺言时的加载指示器

每次在Angular 2中满足条件时,rxJS即可观察到重复调用

rxjs可观察到的更改间隔

等待可观察到的for循环完成,然后继续在Angular 5中循环

Angular HTTP可观察到的元组

RxJs可观察到的重复值

rxjs可观察到的导入问题

在Typescript中可观察到词典

RxJS将可观察到的内容追加到打字稿中的可观察到的数组列表中

等价于rxjs中可观察到的redux'getState'

Angular RxJS可观察到的加载错误

在Angular中使用if条件等待可观察到的响应

如何停止Rxjs中可观察到的共享

使用RxJS过滤单个值并返回可观察到的值,并通过Angular模板中的async使用可观察到的值

等待API响应时显示加载指示器

订阅Angular 8中可观察到组件的问题

从HttpModule中可观察到的RxJS检索数据

Angular RxJS-无法使冷可观察到热

Angular 8:从可观察到的RxJS中过滤结果(来自Angular.io教程)

使用异步管道显示基于计时器的可观察对象的显示加载指示器

Firebase中可观察到的后端?

尝试向API发出多个请求时出现TypeScript可观察到的错误(Angular,TypeScript,RxJS)

在Java中可观察到的null

在表中显示动态可观察到的数组

angular2 rxjs可观察到的forkjoin

RxJs。如果它最近被触发,如何等待其他可观察到的东西

如何取消订阅或处理Angular2或RxJS中可观察到的间隔?

在角度服务中可观察到