問題タブ [angular-httpclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
133155 参照

angular - プロパティ「json」はタイプ「オブジェクト」に存在しません

angular 2 HttpClientを使用してREST経由でデータをフェッチしようとしています。https://angular.io/tutorial/toh-pt6の angular チュートリアルに従っています。Heroes and HTTPセクションの下に、http 経由でヒーロー データを取得するために使用されるこのコード スニペットが表示されます。

以下は、アプリケーションで書いた同様のバージョンです

InteliJ Idea を使用していますが、response.json() の呼び出しに赤い線があり、ng buildを使用してビルドしようとしてもエラーが発生します。

プロパティ 'json' はタイプ 'Object' に存在しません。

json().dataあなたは、代わりに私が持っていることに気付くかもしれませんjson().results。これは、チュートリアルによると、サーバーはフィールドを持つdataオブジェクトで応答しましたが、自分のサーバーはフィールドを持つオブジェクトで応答したためresultsです。チュートリアルを少し下にスクロールすると、この点が表示されます。

サーバーが返すデータの形状に注意してください。この特定のメモリ内 Web API の例は、データ プロパティを持つオブジェクトを返します。あなたの API は何か他のものを返すかもしれません。Web API に合わせてコードを調整します。

これを修正するために、私はこのようなことを試しました

私がそれをしたとき、 .json() メソッドは解決されましたが、別のエラーがポップアップしました

Promise 型にプロパティ結果が存在しません

インターフェイスを定義することでそれを修正しようとしました

そして get 呼び出しを変更しました

しかし、それもうまくいきませんでした。別のエラーが表示されました

タイプ 'OrderResponse' はタイプ 'Response' に割り当てられません。

1 つの注意点として、チュートリアルでは Angular HttpModule を使用していましたが、私のアプリケーションでは新しい Angular HttpClientModule を使用しているため、エラーが発生している可能性があります。

私はAngular 2を初めて使用し、これを使用して構築する最初のアプリです。上記のコードが新しい HttpClientModule で有効でなくなった場合、新しい HttpClientModule で同じことを達成する方法について助けていただければ幸いです。

同様の質問Property 'json' does not exist on type '{}' and Property does not exist on type 'object'を見つけましたが、そこにある回答はどれも役に立ちませんでした。

アップデート

コメントが示唆しているように、新しい HttpClientModule には .json() メソッドはありません。新しいモジュールで同じ効果を達成する方法については、引き続き助けていただければ幸いです。ガイドから、彼らはこのようなことをしました

私は完全に理解していますが、私の問題は、コードがコンポーネント内ではなくサービス内にあるため、サブスクライブを呼び出して結果をインスタンスフィールドに割り当てることはあまり意味がありません。

Promise でラップされた Orders の配列を返すサービスが必要です。my コンポーネントは次のような呼び出しを行うことができます

また、サービスのフェッチ メソッドでローカル変数を宣言して、できるようにすることも考えました。

しかし、 .get() への呼び出しは非同期であり、すべてのデータがフェッチされる前にメソッドが返される可能性があり、注文配列が空になる可能性があるため、それは私にはあまり意味がありません。

アップデート

ここで要求されているのは、handleError のコードです。