angular - 在同一可观察对象上多次使用 `async` 管道

标签 angular observable ngxs

我正在使用 NGXS 更新加载状态并且状态正在正确更新,但我面临一个问题

如何在模板中多处使用加载状态?

NGXS 选择器如下所示:

@Select(MyAppState.isLoadingLayouts) loading$: Observable<boolean>;

现在在我的模板中有一个需要禁用的按钮,加载程序应在调度操作时显示在按钮中。我尝试如下,但没有用。按钮没有被禁用。

<button mat-raised-button class="gec-button" (click)="getLayoutsData()" [disabled]="loading">
  <ng-container *ngIf="loading$ | async as loading; else submit">
   <app-progress-bar [diameter]="16"></app-progress-bar>
  </ng-container>
  <ng-template #submit>Submit</ng-template>
</button>

我认为我们不能使用loading$ | async 在模板中多次触发多个异步调用。

有没有办法实现这个单一的异步管道?

最佳答案

当然。你只需要 share订阅者之间可见:

public getSharedLoading$() {
  return this.loadging$.pipe(share());
}

*ngIf="getSharedLoading$ | async as loading; else submit"

关于angular - 在同一可观察对象上多次使用 `async` 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580849/

相关文章:

javascript - 单击菜单后如何清理#route路径

javascript - 如何创建一个 Countup 计时器 Angular 5

swift - 如何将 RxSwift 的 Single 转换为 Observable 并忽略 `complete` 事件?

Angular Material Table - 映射服务器响应以满足 DataSource 契约(Contract)

angular - ngrx 和 ngxs 之间的性能差异?

Angular 4 : Send custom headers with http requests

angular - 如何在我的 Jasmine /Protractor 测试中执行 typescript 样式继承?

Angular : How to check if some control exist in form or not

ngxs - 是否可以在状态 B 的选择器内使用状态 A 的数据?

angular - ngxs还是行为主体,选哪个