2017-10-19 2 views
1

Ich lerne, wie man HTTPClientModule in Angular 4.3 Ich habe in app.module.ts korrekt importiert und ich versuche, eine http Request GET zu machen. Das ist meine app.component.tsFehler TypError: Kann Eigenschaft 'Name' von undefined nicht lesen

import { Component, OnInit } from '@angular/core'; 
import { HttpClient} from '@angular/common/http'; 
interface Card { 
    card: [{ 
    cardClass: string, 
    cost: number; 
    }]; 
} 
@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent implements OnInit { 
    constructor(private http: HttpClient) {} 
    ngOnInit(): void { 


    this.http.get<Card>('https://api.hearthstonejson.com/v1/21517/enUS/cards.collectible.json').subscribe(data => { 
     console.log(data.card); //This is not working returning undefined 
     console.log(data); //This is not working (removing <Card>) 
    }); 

    } 

} 

Warum data.card ist undefined? Wie kann ich hier auf das Element des Objekts zugreifen, um es dann in ein Array von Karten zu übertragen? Danke für jede Hilfe

+0

können Sie Ihre HTML-Vorlage mit der Frage posten? –

+0

In meinem eckigen Projekt benutze ich Http anstelle von HttpClient, vielleicht hilft es dir? –

+0

Http ist (oder wird) veraltet, HttpClient ist der Weg jetzt zu gehen ... –

Antwort

3

Die API gibt Array von Objekten zurück, aber Ihre Card Schnittstelle definiert Objekt mit card Eigenschaft. Sie müssen Schnittstelle verwenden, die die Antwort beschreiben wird, wie folgt aus:

interface Card { 
    cardClass: string; 
    cost: number; 
} 

interface CardArray { 
    [index: number]: Card; 
} 

this.http.get<CardArray>('https://api.hearthstonejson.com/v1/21517/enUS/cards.collectible.json').subscribe(data => { 
    console.log(data[0]); // first card 
    console.log(data); // all cards 
}); 

Oder noch einfacher Ansatz:

this.http.get<Card[]>('https://api.hearthstonejson.com/v1/21517/enUS/cards.collectible.json').subscribe(data => { 
    console.log(data[0]); // first card 
    console.log(data); // all cards 
}); 
+0

Danke !!! Dies löste das Problem in der Tat. Ich erkannte, dass die Kartenschnittstelle einige Probleme hatte, aber ich konnte nicht herausfinden warum. – aspnet82

0

Versuch map Methode zusammen mit json Methode hinzufügen, kurz bevor abonnieren:

this.http.get<Card>('https://api.hearthstonejson.com/v1/21517/enUS/cards.collectible.json') 
    .map(res => res.json()) 
    .subscribe(data => { 
    console.log(data.card); //This is not working returning undefined 
    console.log(data); //This is not working (removing <Card>) 
    }); 
+0

Es gibt keine 'json' Methode auf Antwort von HttpClient. Es analysiert automatisch die JSON-Antwort für Sie (es sei denn, Sie sagen es nicht). –

+0

Sorry, mein Fehler, mit alten HttpModule – Andriy

+0

für Bequemlichkeit verwirrt Ich schuf einen Plünderer https://plnrkr.co/edit/JZiYveU76SfeNp31MRfL?p=preview, die nur erste Karte wie vorgeschlagen @ MartinAdámek zeigt – Andriy

Verwandte Themen