2016-08-30 9 views
2

ObservablesをAngular 2で始めたところですが、質問があります。角2 Observable Dataservice Observableの項目を取得

データサービスクラスにgetExplorerPageDataというメソッドがあり、http呼び出しを行い、2つの配列を持つデータ構造体を返します。私は、getExplorerPageData()呼び出しで取得された項目の1つを取り出すことができるgetTagという追加の関数を用意したいと思います。

getTagを呼び出すときにサーバーを再度押す必要はなく、単にgetExplorerPageData()に呼び出したアイテムからアイテムを取得するだけです。

私はこれを行うための最善の方法は何ですか?

getExplorerPageData(): Observable<IExplorerPageData> { 
    return this.http.get(this.baseurl + "/explorerpagedata") 
    .map((response: Response) => <IExplorerPageData>response.json()) 
    .catch(this.handleError); 
} 

getTag(id: number): ITag { 
    //todo need to return one of the tags in explorerPageData.Tags 
    return 
}; 

export interface IExplorerPageData{ 
Tags: ITag[], 
Uploads: IUpload[], 
} 

export interface ITag { 
    TagId: number, 
    Title: string 
} 

答えて

0

あなたは.map(...)オペレータへの呼び出しを追加したり、do(...)演算子を使用することができます:それは最後に値を返すことが重要ですmap()オペレータで

getExplorerPageData(): Observable<IExplorerPageData> { 
    return this.http.get(this.baseurl + "/explorerpagedata") 
    .map((response: Response) => { 
    var data = <IExplorerPageData>response.json(); 
    getTag(data); 
    return data; 
    }) 
    .catch(this.handleError); 
} 

または

getExplorerPageData(): Observable<IExplorerPageData> { 
    return this.http.get(this.baseurl + "/explorerpagedata") 
    .map((response: Response) => <IExplorerPageData>response.json()) 
    .do((data) => getTag(data)) 
    .catch(this.handleError); 
} 

を戻り値は、サブスクライバが受け取る値です。

do()演算子では戻り値は関係ありません。前のmap()から返された値は、do()が返すかどうかに関係なく、サブスクライバに転送されます。

+1

第1の変種で 'do()'を呼び出すべきではないと思いますか? –

+0

良いキャッチです。ありがとう - 固定。 –

関連する問題