2017-12-07 14 views
1

同じページに2つのコンポーネントがあります。各コンポーネントは、パラメータを持つサービスからのObservableに加入している注文に関するものを表示しています。異なるコンポーネントから同じ監視可能な(共有)サブスクリプションを使用して

サービス:

getOrders(url: string, query: string) : Observable<any> { 
     return this.http.get(url + "&" + query, this.options) 
         .map((res:Response) => res.json()) 
         .catch((error:any) => Observable.throw(error || 'Server error')) 
         .share(); 

    } 

成分1:

Observable.combineLatest(this.behaviorsubject1,this.behaviorsubject2) 
    .subscribe((res)=>{ 
       this.combineLatestStream = res; 
       this.selectedOrganization = this.combineLatestStream[1]; 

       this.mainService$ = this.orderService.getOrders(this.settings.backend.orders, "organization_id="+this.selectedOrganization.organization_id); 
       this.mainService$.subscribe(result => { 
       //call 1 
       }); 

    }); 

成分2:私はすべての注文を取得する第一成分で

this.aservice.stuff.subscribe((res) => { 
    this.selectedOrganization = res; 
    this.mainService$ = this.orderService.getOrders(this.settings.backend.orders, "organization_id="+this.selectedOrganization.organization_id+"&status=1"); 
    this.mainService$.subscribe((val) => { 
     //call 2 
    }) 
    }) 

。 2番目のコンポーネントでは、(いくつかのパラメータに基づいて)一部だけを取得します。どちらもmainService$です。私はこのサービスを購読する必要があるより多くのコンポーネントを持っています。サービスの共有は機能していません。その他の方法は?

publishReplay(1).refCount()でも試しました。私は複数のAPI呼び出しをしたくない。サブスクライブした後

答えて

1

HTTP、観察が完了すると、あなたはすべての加入者が通知されることを望む場合は、BehaviorSubjectを使用してgetOrders behaviorSubject.next(に呼び出す必要があります):

例:

behaviorSubject = new BehaviorSubject(<Orders[]>{}) 

getOrders(url: string, query: string) : void { 
     this.http.get(url + "&" + query, this.options) 
         .map((res:Response) => res.json()) 
         .catch((error:any) => Observable.throw(error || 'Server error')) 
         .do((orders) => behaviorSubject.next(orders)) 
         .subscribe(); 

    } 
+0

使い方'void'は動作しません。そして今、データをコンポーネントでどのように入手できますか? –

+0

申し訳ありませんが、それが動作しますリターンを削除 –

+0

ええ、ちょうど誤植を考え出した。さて、あなたが説明したいことは理解していますが、どのようにデータをコンポーネントで得ることができますか。 'this.mainService $'これは 'undefined'です。 –

関連する問題