angular - 如何在 Angular 2 中将多个 Observable 组合在一起

标签 angular observable subject behaviorsubject

所以我刚刚开始使用 Angular 2 进行编程,并且刚刚开始学习订阅、主题和行为主题。目前我有多个订阅来获取存储在我的服务中并发送到组件的值。我的应用程序可以正常工作,但我知道它效率很低。它在我的组件中失控了:

this.threatService.minLimitChange$.subscribe( min => { this.min = min; this.getSession();});
this.threatService.maxLimitChange$.subscribe( max => { this.max = max; this.getSession();});

(和其他 5 个获取单个值并每次调用函数 getSession() 一样)

在我的 threat.service 中:

private minLimitChangeSource = new BehaviorSubject<number>(this.min);
private maxLimitChangeSource = new BehaviorSubject<number>(this.max);
minLimitChange$ = this.minLimitChangeSource.asObservable();
maxLimitChange$ = this.maxLimitChangeSource.asObservable();

所以我试过了:

this.threatService.minLimitChange$.concat(this.threatService.maxLimitChange$).subscribe( res => console.log(res));

我的目的只是测试 res 是什么,因为我不确定如何访问这两个值...但我在我的控制台中得到了这个。 ;/

TypeError: this.threatService.minLimitChange$.merge is not a function. (In 'this.threatService.minLimitChange$.concat(this.threatService.maxLimitChange$)', 'this.threatService.minLimitChange$.concat' is undefined)

最终,我想从我的服务中获取 getSession() 所需的所有值,并一次运行该函数。请提供有关如何使用 concat、merge 或 forkJoin 合并我的订阅的任何帮助或解释,我将不胜感激。谢谢!

最佳答案

您可以使用 Observable.combineLatest 将 2 个可观察流合并为一个:

combineObs = obs1.combineLatest(obs2, 
  (val1, val2) => { 
    return {val1: val1, val2: val2};
  });

正在工作的 plunker:http://plnkr.co/edit/mmCzEmdKexpaWNM53me9?p=preview

关于angular - 如何在 Angular 2 中将多个 Observable 组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38364591/

相关文章:

json - 下拉列表无法从对象中提取数字值(Angular 4)

javascript - Kendo UI MVVM 不明确的行为

http - 如何只等待一定时间才能在 Angular 2 中获得 HTTP 请求(GET/POST)的响应?

javascript - RxJs Observable 多次完成

angular - 单元测试 Angular 2 服务主题

arrays - 访问对象数组中的特定对象属性时返回对象 promise ? ( Angular - ionic )

javascript - Angular - 数据已加载 - ID 的初始值为 NaN

CSS 样式 Angular 2+(痛在屁股上)

python - 使用枚举 Django 的下拉菜单主题

Angular 2+缓存的HTTP请求强制重新加载