2017-06-28 4 views
1

Ich versuche Angular2 mit TypeScript und Probleme beim Versuch, die Antwort von meiner http-Anfrage zu erhalten. Es ist eine Array-Antwort vom Server und ich habe eine Klasse definiert, die darauf abgebildet werden soll. Der Code ist unten. Kann jemand das Problem erkennen?Antwort in Angular2 von http Anfrage als JSON

this.http 
    .get(this.testUrl, { 
    data: JSON.stringify(mockData), 
    headers: this.headers 
    }) 
    .map(response => response.json() as People[]) 
    .subscribe(result => this.peopleList = result); 

Menschen Liste wird in der Klasse definiert als

peopleList: People[]; 

Klasse My People sieht aus wie diese

export class Flight { 
    Name: string; 
    Age: number; 
} 

Die Ausgabe der Daten in einem Array ist immer, sondern nur der Json-Array. Wenn ich die Eigenschaft von Name zu DummyName ändere, zeigt es immer noch die gleiche Ausgabe für die Daten in dem Array, nachdem es in ein People [] "konvertiert" wurde.

Sollte ich die Klasseneigenschaften sehen? Ich verwende Chrome Debugger, um die Variable abzufragen


Bearbeiten Hinzufügen von console.log() info. Es ist ein Array von etwa 300.

[0 … 99] 
0 : Object 
Name : "Simon" 
Age : 45 
__proto__:Object 

1:Object 
Name:"Luke" 
Age:21 
__proto__:Object 
+0

Können Sie Ihren Beitrag bearbeiten und uns die zurückgegebenen Daten anzeigen? Fügen Sie einfach ein 'console.log (response.json());' in Ihrer 'map' -Funktion hinzu. Auf diese Weise können wir Ihnen helfen. – trichetriche

+0

Das Protokoll (oder einen Teil davon) hinzugefügt. Mit einem Haltepunkt in dieser map() -Funktion wird es nur einmal getroffen. Nicht sicher, ob das ein Zeichen für das Problem ist? – Matt

Antwort

0

Das Ergebnis, das Sie erhalten, wenn Sie res.json() nennen, ist nur ein einfaches Objekt (POJO), keine Klasseninstanz. Dies bedeutet, dass ihr Typ object ist. Die Tatsache, dass Sie sie manuell "umsetzen", ändert nicht die Tatsache, dass die Objekte keine Instanzen der Klasse People sind.

Sie haben zwei Möglichkeiten, die POJOs zu handhaben:

  • definieren sie eine Schnittstelle Trog (dazu sollten Sie in eine Schnittstelle Menschen ändern)
  • Karte jedes Element von Ihnen POJO Array in eine Instanz Personen Klasse mit der Konstruktormethode
+0

Danke, ich nehme an, Interface ist die bevorzugte Methode. Ist es einfach, die Klasse zu einer Schnittstelle zu machen? Basierend auf https://www.tutorialspoint.com/typescript/typescript_interfaces.htm sieht es so aus – Matt