5

Angular 2 でプログラミングを始めたばかりで、サブスクライブ、サブジェクト、および BehaviorSubject について学び始めたところです。現在、サービスに保存され、コンポーネントに発行された値を取得するための複数のサブスクリプションがあります。私のアプリケーションは機能しますが、非常に非効率的であることはわかっています。私のコンポーネントで手に負えなくなったこと:

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

(そして、単一の値を取得し、毎回関数 getSession() を呼び出す他の5つのように)

私の 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));

私の目的は、2つの値にアクセスする方法がわからなかったため、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 を使用してサブスクリプションを結合する方法についてのヘルプまたは説明をいただければ幸いです。ありがとうございました!

4

1 に答える 1

11

Observable.combineLatest2 つの監視可能なストリームを 1 つに結合するために使用できます。

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

ワーキングプランカー: http://plnkr.co/edit/mmCzEmdK ​​expaWNM53me9?p=preview

于 2016-07-14T03:53:45.550 に答える