2016-08-30 4 views
2

Ich fange gerade mit Observables in Angular 2 an und habe eine Frage.Angular 2 Observable Dataservice get Gegenstand von Observable

Ich habe eine Methode in meiner Datenservice-Klasse namens getExplorerPageData, die einen http-Aufruf macht, der eine Datenstruktur mit ein paar Arrays zurückgibt. Ich hätte gerne eine zusätzliche Funktion namens getTag, die eines der Elemente abrufen kann, die im Aufruf getExplorerPageData() abgerufen wurden.

Um klar zu sein, ich möchte den Server nicht erneut treffen, wenn ich getTag aufrufen, würde ich lieber nur das Element aus dem Aufruf abrufen, die ich bereits getExplorerPageData() gemacht habe.

Ich fragte mich, was ist der beste Weg, dies zu tun?

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 
} 

Antwort

0

Sie können den Anruf an den .map(...) Operator hinzuzufügen, oder verwenden Sie die do(...) Betreiber:

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); 
} 

oder

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

Mit dem map() Betreiber ist es wichtig, den Wert am Ende zurückkehren , weil der zurückgegebene Wert das ist, was der Abonnent erhält.

Mit dem Operator do() ist der Rückgabewert egal, der vom vorherigen map() zurückgegebene Wert wird an den Abonnenten weitergeleitet, egal was do() zurückgibt.

+1

Ich denke der Aufruf zu 'do()' in der 1. Variante sollte nicht da sein? –

+0

Guter Fang. Danke - behoben. –

Verwandte Themen