2016-04-14 7 views
1

Ich versuche, folgen Sie diesen Anweisungen: https://angular.io/docs/ts/latest/guide/server-communication.html und erhalten Sie die Liste der Objekte vom Server in Form eines Objekts (nicht JSON).Parsen Antwort Antwort Json in ein Objekt mit Angular2

Ich habe eine Modellklasse (bis jetzt vereinfacht):

export class Goal { 
    id: number; 
    title: string; 
} 

Und ich versuche Liste dieser vom Server über eine Service-Klasse wie folgt zu erhalten:

export class GoalsService { 

    constructor(public authHttp:AuthHttp) { 
    } 

    getGoals() { 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.authHttp.get('<%= BACKEND_BASE_URL %>' + '/rrm/api/v1/goals', options) 
     .map(res => { 
      <Goal[]> res.json() 
     } 
    ) 
     .do(data => console.log(data)) 
     .catch(this.handleError); 
    } 
... 

Und die Client, der die Serviceklasse verwendet, lautet:

Die Anfrage läuft einwandfrei und ich bekomme zurück:

[{"id":1,"title":"target"}] 

jedoch in dem Client innerhalb subscribe wird goals Variable immer 'undefined'.

ich es versucht, das Debuggen, das ist, was ich bekommen: enter image description here

Was mir sagt, dass json empfangen und richtig analysiert, aber es in ein Zielobjekt Gießen funktioniert nicht (es sei denn, ich nicht ganz das bekommen bin Mechanismus).

Was mache ich falsch?

Danke,

Hinweis: Die authHttp Service, die ich benutze ist dieser Typ: https://auth0.com/blog/2015/11/10/introducing-angular2-jwt-a-library-for-angular2-authentication/. Und es funktioniert an allen anderen Orten wie erwartet. Also bezweifle ich, dass es ein Peoblem ist.

Antwort

3

Da Sie map Pfeilfunktion verwenden, sollten Sie return Ergebnis zugeordnet.

return this.authHttp.get('<%= BACKEND_BASE_URL %>' + '/rrm/api/v1/goals', options) 
    .map(res => { 
     return <Goal[]> res.json(); //return mapped object from here 
    } 
) 

ODER

return this.authHttp.get('<%= BACKEND_BASE_URL %>' + '/rrm/api/v1/goals', options) 
    .map(res => <Goal[]> res.json()) //or simply do map object directly 
+1

Vielen Dank! Funktioniert! Ich werde die Antwort in 4 Minuten akzeptieren :) –

+0

@ShurikAgulyansky Froh, Ihnen zu helfen. Vielen Dank :-) –