angular - [Angular 10][Rxjs] 为什么第二个管道没有触发
问题描述
我有两个订阅者订阅同一个 Observable,但第二个订阅者没有发出值。我缺乏知识的管道是否存在限制?
组件.ts
private readonly destroyed$ = new Subject<void>();
public readonly vm$ = this.service.vm$.pipe(
tap(console.log),
takeUntil(this.destroyed$)
);
public readonly labels$ = this.service.vm$.pipe(
zip(this.makeLabels),
tap(console.log),
takeUntil(this.destroyed$)
)
...
constructor(private readonly service: SomeService) {
this.service.load();
}
ngOnDestroy(): void {
this.destroyed$.next();
this.destroyed$.complete();
}
一些.service.ts
export class SomeService implements OnDestroy {
private readonly destroyed$ = new Subject<void>();
private _vm$ = new BehaviorSubject<ViewModel>(null);
public readonly vm$ = this._vm$.asObservable().pipe(takeUntil(this.destroyed$));
...
load() { this._vm$.next({...}) }
}
组件.html
<ng-container *ngIf="vm$ | async as vm">
<header>
<pre *ngFor="let label of labels$ | async">
{{label | json}}
</pre>
</header>
</ng-container>
解决方案
所以解决方案是*ngFor="let label of labels$ | async"
从pre
高阶ng-container
.
<ng-container *ngIf="vm$ | async as vm">
<header>
<ng-container *ngFor="let label of labels$ | async">
<pre>
{{label | json}}
</pre>
</ng-container>
</header>
</ng-container>
我不知道为什么,但是这样可以。也许有人可以解释一下。
推荐阅读
- linux - 如何检查文件列表中的字符串并在 Linux 中显示最新修改的字符串
- android - FragmentManager.getFragmentFactory 的 NoSuchMethodError
- jquery - 如何等待所有 jquery 加载完成
- java - 如何在java中计算pdf文件中的字母数量
- excel - Access VBA中一列的总和
- node.js - 什么是:woocommerce rest api 中的 is_paying_customer 字段
- python - 如何在堆栈中打印多个随机元素/项目?
- python - Django:在 HTML 中使用多个输入字段(带有下拉菜单)搜索 Django 模型的多个字段
- android - 使用本地 DNS 在 android 中工作
- r - 在 XTS 中添加列名并在 XTS 中更改日期