Ich versuche, Daten über REST mit angular 2 HttpClient zu holen. Ich folge dem eckigen Tutorial hier Ссылка und im Abschnitt Heroes and HTTP Sehen Sie sich diesen Codeschnipsel an, der zum Abrufen von Held-Daten über http verwendet wird.
%Vor%Und unten ist eine ähnliche Version, die ich in meiner Anwendung geschrieben habe
%Vor%Ich benutze InteliJ Idea und es gibt eine rote Linie auf dem Aufruf response.json () und selbst wenn ich versuche, mit ng build zu bauen, bekomme ich den Fehler.
Die Eigenschaft 'json' existiert nicht für den Typ 'Objekt'.
Sie werden feststellen, dass json().data
statt json().results
steht. Das ist so, weil der Server laut dem Tutorial mit einem Objekt reagiert hat, das ein data
-Feld hat, aber mein eigener Server antwortet mit einem Objekt, das ein results
-Feld hat. Wenn Sie das Tutorial ein wenig nach unten scrollen, sehen Sie diesen Punkt.
Beachten Sie die Form der Daten, die der Server zurückgibt. Diese besondere In-Memory-Web-API-Beispiel gibt ein Objekt mit einer Dateneigenschaft zurück. Ihre Die API könnte etwas anderes zurückgeben. Passen Sie den Code an Ihr Web an API.
Um dies zu beheben, habe ich so etwas versucht
%Vor%Als ich das gemacht habe, wurde die .json () Methode aufgelöst, aber ein weiterer Fehler tauchte auf,
Eigenschaftenresultate gibt es nicht für Typ Promise
Ich habe versucht, das zu beheben, indem ich eine Schnittstelle definiere
%Vor%Und den Aufruf von
geändert %Vor%Aber das hat auch nicht funktioniert. Ein weiterer Fehler tauchte auf
Geben Sie 'OrderResponse' nicht dem Typ 'Response' zu.
Eine Sache ist, dass sie im Tutorial das Angular HttpModule verwendet haben, aber in meiner Anwendung verwende ich das neue Angular HttpClientModule, also kommt vielleicht der Fehler.
Ich bin neu in Angular 2 und das ist die erste App, die ich damit baue. Wenn der obige Code mit dem neuen HttpClientModule nicht mehr gültig ist, würde ich mich über jede Hilfe freuen, wie Sie dasselbe mit dem neuen HttpClientModule erreichen können.
Ich habe ähnliche Fragen gefunden Die Eigenschaft 'json' existiert nicht für den Typ '{}' und Eigenschaft existiert nicht beim Typ 'Objekt' aber keine der Antworten dort half mir.
Aktualisieren
Wie in den Kommentaren vorgeschlagen, gibt es keine .json () -Methode im neuen HttpClientModule. Ich würde immer noch die Hilfe schätzen, wie man mit dem neuen Modul den gleichen Effekt erzielen kann. Von der Anleitung haben sie so etwas gemacht.
%Vor%Das verstehe ich perfekt, aber mein Problem ist, dass Code nicht innerhalb einer Komponente ist, sondern ein Service, so dass das Aufrufen von subscribe und das Zuweisen des Ergebnisses zu einem Instanzfeld nicht viel Sinn ergibt.
Ich brauche meinen Dienst, um eine Reihe von Orders zurückzugeben, die in einem Versprechen enthalten sind. Die my-Komponenten können nur Anrufe wie
machen %Vor%Ich dachte auch darüber nach, eine lokale Variable in meiner Service-Fetch-Methode zu deklarieren, so dass ich
machen kann %Vor%Aber das macht für mich keinen Sinn, da der Aufruf von .get () asynchron ist und die Methode möglicherweise zurückkehrt, bevor alle Daten abgerufen wurden und das Array orders leer sein kann.
Aktualisieren
Wie hier gefordert, ist der Code für handleError
%Vor%Angenommen, dass Ihr Backend etwas wie folgt zurückgibt:
%Vor% UPDATE: Jetzt gibt das Backend {results: [{},{}]}
im JSON-Format, wobei jedes {} ein serialisiertes Objekt ist, benötigen Sie Folgendes:
%Vor%Ich habe den Catch-Abschnitt entfernt, da dieser über einen HTTP-Interceptor archiviert werden könnte. Überprüfen Sie die Dokumentation . Als Beispiel:
Und um es zu konsumieren, muss man es einfach wie folgt nennen:
%Vor% Für zukünftige Besucher : In der neuen HttpClient
(Angular 4.3+) co_de% object ist standardmäßig JSON, so dass Sie response
nicht mehr benötigen. Verwenden Sie einfach response.json().data
direkt.
Beispiel (geändert aus der offiziellen Dokumentation):
%Vor%Vergessen Sie nicht, es zu importieren und das Modul unter Importe in die app.module.ts Ihres Projekts aufzunehmen:
%Vor%Tags und Links angular typescript angular-httpclient