【发布时间】:2018-02-16 05:45:09
【问题描述】:
如果没有 observables,我可以在 HTML 模板中编写以下行:
<div *ngIf="(myVarA || myVarB) && myVarC !== x"></div>
如果所有myVar 变量现在实际上都是可观察的,我该如何翻译这一行?
<div *ngIf="((myVarA | async) || (myVarB | async)) && (myVarC | async) !== x">
不工作。
在另一个问题 (Putting two async subscriptions in one Angular *ngIf statement) 中,将两个或多个 observables 组合成一个 ngIf 的可能性可以像这样实现
<div *ngIf="{ a: myVarA | async, b: myVarB | async } as result"></div>
但是,我看不到在用于评估 ngIf 的表达式上使用任何布尔运算符(或任何运算符)的可能性。
我该如何解决这个问题?请注意,我所有的 Observable 都在下面使用 BehaviorSubject。我想基本上我想要的是在模板中使用combineLatest 运算符。
奖励:如果整个表达式的计算结果为 true 以供以后在模板中使用(如 myVarA | async as varA),是否有任何方法可以提取 myVarA 的单个值?
【问题讨论】:
-
是否有可能制作一个将两者结合起来的新可观察对象?另一种方法是使用一个以 undefined 或 null 开头的对象变量,在 observables 发送下一个值之后,您可以将您的对象变量设置为某个值。
-
observables 用于在您的情况下获取值流,变量一次只能有一个值。您要么订阅可观察数组,然后将异步仅用于数组而不是单个可观察数组
-
@John 我正在使用带有 ChangeDetectionStrategy.onPush 的反应式方法,因此我不能在代码中使用然后在模板中更新的对象。使用 combineLatest 组合 observables 是我的想法,但我真的很想避免在代码中这样做
-
@SunilKumar 如何订阅可观察的数组?
标签: angular rxjs angular-template