【发布时间】:2019-11-25 03:13:58
【问题描述】:
我创建了一个 Setting-Service,其中包含 2 个 BehaviorSubjects,如下所示:
settingNameSubject = new BehaviorSubject<SettingName>({});
SettingDataSubject = new BehaviorSubject<SettingData>({});
<SettingData> 包含对象列表,每个对象都有一个<SettingName>。
我必须创建一个 Setting-Name-Observable,它只订阅 settingNameSubject,并返回在 SettingDataSubject 中找到的值。
我使用了 combineLastest:
this.SettingName$ = this.SettingNameSubject.asObservable();
this.combinedOne = combineLatest(this.SettingName$, () => {
return this.SettingDataSubjectValue.filter(item => item.name === this.SettingName$.getValue())
});
是否有不同的方法来解决可能的问题?
如果我想同时订阅 BehaviorSubject,我应该使用 combineLatest2 吗?
【问题讨论】:
-
这些主题总是同步的吗?例如,当在
SettingName$上调用next而不是在SettingDataSubjectValue上调用时会发生什么?如果这些是同步的,那么您可以创建一个返回两个值的主题。 -
2 个主题始终同步。因为我有 2 个屏幕,设置调整和另一个屏幕使用设置来显示图表。当图表名称更改时,我通知设置服务和设置调整屏幕将根据图表名称更改。