2017-07-21 3 views
0

Ich versuche, Daten von meiner Service-Funktion abzurufen, aber es treten Probleme auf. Mein LandingPage-Komponentencode, der unten angezeigt wird, sendet einen Tastendruck an meine Servicefunktion, die ein Objekt zurückgibt, das mit Daten voll ist.Abrufen von Objektdaten von einem Dienst in Angular 2

Aber ich kann das Service-Objekt nicht zu meiner LandingPage zurückkehren. Hier ist, wie ich meinen Dienst erstellen:

task.service.ts

addKey(keystroke) { 
    const query = "https://api.themoviedb.org/3/search/tv?api_key="; 
    fetch(query + key + '&language=en-US&query=' + keystroke) 
     .then((show) => { 
     show.json().then((obj) => { 
      // grab the items we want from the response 
      let resultItems = obj.results.map((show, index) => { 
      return { 
       id: show.id, 
       poster: show.poster_path, 
       rating: show.vote_average, 
       backdrop: show.backdrop_path, 
      }; 
      }); 
      // return our newly formed object 
      return { data: resultItems } 
     }); 
     }); 
    } 

Hier ist, wo ich versuche, die Service-Daten zu empfangen, in meinem:

landingpage.component. ts

getKey(keystroke) { 
     this.TaskService.addKey(keystroke) 
     .subscribe(res => { 
      this.shows = res.data; // trying to receive service info here 
     }); 
    } 

Wenn ich zu bauen versuchen, erhalte ich die folgenden Fehler in meinem Landing com Komponente:

Die Eigenschaft 'subscribe' existiert nicht beim Typ 'void'.

Ich habe versucht, Karte anstelle von abonnieren, aber es gibt einen ähnlichen Fehler zurück.

Wie kann ich das Objektergebnis von meinem Dienst an meine Komponente senden?

addKey(keystroke): Observable<any> { 
    const query = "https://api.themoviedb.org/3/search/tv?api_key="; 
    return this.http.get(query + key + '&language=en-US&query=' + keystroke) 
     .map(show => { 
     show.json().then((obj) => { 
      // grab the items we want from the response 
      let resultItems = obj.results.map((show, index) => { 
      return { 
       id: show.id, 
       poster: show.poster_path, 
       rating: show.vote_average, 
       backdrop: show.backdrop_path, 
      }; 
      }); 
      // return our newly formed object 
      return { data: resultItems } 
     }); 
     }); 
    } 

Wenn Sie Sie wirklich holen wollen verwenden können, wenn:

Antwort

1

Es aussieht wie du bist ein return in Ihrem Service-Methode fehlt, habe ich auch mit http unserer Diskussion in den Kommentaren geändert Sie:

  • Stellen Sie die Methode Rückkehr Signatur Promise<any>
  • Verwendung then statt map im Dienst
  • Verwenden then statt subscribe in der Komponente
+0

Vielen Dank für die Antwort! Dies gibt mir immer noch den gleichen Fehler, nicht sicher warum. Ich versuche auch, {data: resultItems} an die Komponente – Edon

+0

zurückzugeben, Sie benötigen möglicherweise auch die Methode return signature (die Antwort wurde aktualisiert, um diese einzuschließen) Ist dies ein Laufzeitfehler oder ein Zeitfehler? – 0mpurdy

+0

danke! Dies ist ein transpilierbarer Zeitfehler, ich denke, dass das Observable die richtige Richtung sein kann, immer noch ein bisschen Ärger, hier zu sehen: http://i.imgur.com/2HxvyNQ.png – Edon

Verwandte Themen