如何将以下订阅合并为一个?
this.form.get("type").valueChanges.subscribe(() => {
this.calcFinalTransports();
})
this.form.get("departure").valueChanges.subscribe(() => {
this.calcFinalTransports();
})
this.form.get("destination").valueChanges.subscribe(() => {
this.calcFinalTransports();
})
this.form.get("stations").valueChanges.subscribe(() => {
this.calcFinalTransports();
})
答案 0 :(得分:5)
根据您期望的输出,您有一些选择。您可能想阅读这篇文章:
如果您只是想在任何值更改时使用merge
:
import {merge} from "rxjs/observable/merge";
merge(
this.form.get("type").valueChanges,
this.form.get("departure").valueChanges,
this.form.get("destination").valueChanges
this.form.get("stations").valueChanges
).subscribe(() => this.calcFinalTransports());
答案 1 :(得分:1)
如果要使用单个数据可观察模式并将多个可观察值组合为一个可观察值,那么 combineLatest 可能会有用。
PesudoCode
userNameAndEmail$=this.userNameAndEmail().pipe(startsWith(null));
userAddressDetail$=this.userAddressDetails().pipe(startsWith(null));
userMiscDetails$=this.userMiscDtls();
completeUserData$=combineLatest([userNameAndEmail$,userAddressDetail$,userMiscDetails$])
.pipe(map(([userNameAndEmail,userAddressDetail,userMiscDetails])=>{
return {userNameAndEmail,userAddressDetail,userMiscDetails}; } ));
但是,有某些条件。 https://www.learnrxjs.io/learn-rxjs/operators/combination/combinelatest
答案 2 :(得分:-1)
Max Koretskyi 的解决方案不是最新版本的 RxJs,我也弄错了。
“合并”有两个版本:
与:
import {merge} from 'rxjs';
你可以写:
this.globalChange$ = merge(this.form.get("type"), this.form.get("departure"), ... )
但是有:
import {merge} from 'rxjs/operators';
你必须写:
this.globalChange$ = this.form.get("type").pipe(merge(this.form.get("departure"), ... ) )
请注意,最后一个版本已弃用!