2016-06-30 11 views
1

Ich habe herausgefunden, wie man ein JSON-Objekt von http bekommen und Liste die Ergebnisse über * ngFor.Angular 2 run Schnittstelle während http erhalten

Was ich nicht herausfinden kann, ist, wie man eine Schnittstelle dagegen laufen lässt. Meine Interface-Datei ist hier:

import {Offer} from './offer'; 

und ich habe meine http bekommen Anfrage hier:

constructor(private _httpService: HTTPTestService) { } 

offers: ""; 

onTestGet() { 
    this._httpService.getOffers() 
     .subscribe(
     data => { this.offers = data.offers; }, 
    error => alert(error), 
    () => console.log("Finished") 
    ); 
} 

Aber wie führe ich das „Angebot“ Schnittstelle hinter dem Objekt, das ich zurück?

+0

Was genau meinen Sie mit „eine Schnittstelle dagegen laufen“? Du meinst für die automatische Vervollständigung? Dann würde ein 'offers: Array = [];' ausreichen. – rinukkusu

+0

Oh ich denke, ich könnte verwirrt sein. Die Beispiele, die ich gesehen habe, die Daten vom Array erhalten, benutzen eine Schnittstelle. Aber ich notiere nur Ergebnisse und das war's. Keine Formulare oder irgendetwas. Muss ich mich beim Kauf eines JSON-Objekts mit Interfaces herumschlagen? –

+0

Nein, überhaupt nicht! Nur wenn Sie eine automatische Vervollständigung für das Objekt benötigen. – rinukkusu

Antwort

1

Sie müssen vorsichtig mit Schnittstellen in TypeScript sein. Schnittstellen dienen nur zur Design- und Typprüfung, sind aber zur Laufzeit nicht vorhanden.

Sie können ein Array mit Offer für Angebote definieren und die erhaltenen Daten in Offer[] umwandeln. Aber jedes Element ist nicht vom Typ Offer. Dies ermöglicht es, die Struktur von Objekten während der Kompilierung zu überprüfen ...

ist hier ein Beispiel:

constructor(private _httpService: HTTPTestService) { } 

offers: Offer[]; // <---- 

onTestGet() { 
    this._httpService.getOffers() 
    .subscribe(
     data => { this.offers = <Offer[]>data.offers; }, // <---- 
     error => alert(error), 
    () => console.log("Finished") 
    ); 
} 
+0

Ah ok so effektiv müssen Sie es zweimal deklarieren? Ich habe Probleme, den Kopf über Schnittstellen zu bekommen. Warum brauche ich sie? Ist es nur, um mir die Fehler beim Schreiben von Code zu zeigen? Kann ich ein ganzes Projekt erstellen, ohne es zu benutzen? –

+0

Nein, das ist nicht obligatorisch. Sie können JS-ähnlichen Code in TypeScript verwenden, wenn Sie möchten. Allerdings ist die Typprüfung wirklich eine interessante Eigenschaft von TypeScript, daher würde ich empfehlen, sie zu verwenden ;-) Um Ihre Frage zu beantworten, werden Interfaces nur zur entworfenen Zeit/Zusammenstellung verwendet. Dies verhindert Probleme zur Laufzeit ... –