我已经根据某种逻辑从一个大型组中过滤了几个FormControl(S( - 我想知道如何合并/组合那些选择的formControls,并且只有一个订阅..
我研究了RXJS文档和大理石图,但不正确理解。理解所有这些并知道用于我的案件是非常困惑的:
- forkJoin
- combineLatest
- merge
- join
- zip
以下是有关问题的更详细信息:
假设2 formcontrols(即控制器,控制b(。我想在任何formcontrol值更改时执行我的一些handlerFunction
。*每当有任何控件的Valuechange(在我的情况下,任何一个控件都会一次更改(
谢谢。
最佳选择是combineLatest
,它在所有源源发射至少一个值之后发出,然后在任何源中的每次发射中都从任何可观察到的源:
Observable.combineLatest(controlA.valueChanges, controlB.valueChanges)
.subscribe(...);
最终您可以用startWith(null)
链接每个源,以确保每个源将立即发射一项并过滤您在订户中所需的内容。
Observable.combineLatest(
controlA.valueChanges.startWith(null),
controlB.valueChanges.startWith(null)
)
.subscribe(([val1, val2]) => ...);
btw,关于其他操作员:
-
zip
-仅当所有来源发出相同数量的项目
时发出 -
forkJoin
-当所有源排放至少一项并完成时发出(valueChanges
永远不会发生( -
merge
-仅合并可观察到的东西,但您不知道哪一个发出了什么值 -
join
-我不认为这是RXJS 5
对于那些不弃用的人组合的人,请尝试将ValueChanges观测值组合在数组中。另外,对于那些不推荐使用的人,请尝试不使用null。
combineLatest([
this.typeSelected.valueChanges.pipe(startWith('')),
this.checkedFC.valueChanges.pipe(startWith(false))
]
).subscribe(([type, checked]) => {
console.log([type, checked]);
});