angular - 在等待 RxJS 可观察对象时在 Angular 中显示加载指示器
问题描述
我有一个 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>
推荐阅读
- c# - 如何实现类的字符串名称与类本身的一致性?
- python-3.x - 如何在机器人框架中按下上下文菜单的向下箭头键
- javascript - 为jQuery中动态创建的按钮提供不同的ID
- javascript - RxJS:Forkjoin 类实例属性
- python - 无法正确加密python3中的数据
- python - 无法从 PIL 导入 PILLOW_VERSION
- python - 如何使用 Python Selenium 单击具有 href 属性的元素
- java - 找到超过 1 行具有给定标识符的行
- jsf - Primefaces 多选列表框
- python - CSRF 令牌的值在 Django 中没有改变