angular - 在等待 RxJS observable 时在 Angular 中显示加载指示器

标签 angular rxjs observable

我有一个 Angular 组件,它监听要更改的用户 ID 的路由参数,以及何时加载用户详细信息。用户详细信息需要几秒钟才能从 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>

如果该内部 switchMap 当前正在运行,我希望用户详细信息 div 为空白或显示某种加载指示器。我知道一个选项是在 switchMap 之前设置一个加载变量为 true,在 switchMap 之后设置为 false 并在 div 的 *ngIf 中使用它,但我希望有一种更灵活的方法不必拥有为每一种情况加载变量。

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

目标是当我单击用户 B 按钮时,用户 A 信息应该在用户 B 加载时消失。我的应用程序中有几十个这种场景,所以我正在寻找最干净的方法来做到这一点。

最佳答案

你可以改变你的 *ngIf

ngIf="userDetails | async as userDetails else #loading"

然后
<div #loading>
  loading...
</div>

Reference

关于angular - 在等待 RxJS observable 时在 Angular 中显示加载指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53767697/

相关文章:

javascript - 过滤窗口上的事件与 DOM 节点上的单个事件

javascript - 无法使用自定义过滤器管道读取未定义的属性 '0'

javascript - @Injectable Service 不会转移到 Angular 5 中的组件

c# - 组合依赖于其他可观察量的可观察量

typescript - Primeng - 对话服务将数据传递给对话组件

javascript - 从 RxJS subscribe() 函数访问声明为组件的变量

css - 手机版Fullcalendar设置高度

RxJS:确保即使在取消订阅后也会触发 "tap"

angular - 从 Google API 加载 auth2 时不会运行更改检测

html - 如何在 ion-card-header 的右侧定位图标?