web-dev-qa-db-ja.com

Angular Response.json()は文書化されていません

Response.json()メソッドが頻繁に使用されていることを確認し、自分で使用していますが、何かが足りないか、Responseクラスのドキュメントが間違っています。

例:

getCurrentTime() {
    return this._http.get('http://date.jsontest.com/')
        .map((res:Response) => res.json())
}

Angularサイト https://angular.io/docs/ts/latest/api/http/index/Response-class.html 、私は ' tメソッドをResponseクラスのメンバーとして見る。

.jsonがnotResponseクラスのメンバーである場合、誰かがこれがどのように機能するかを理解する方向に私を向けることができます。

または、ドキュメントが間違っている場合は、誰かがそう言ってください。

前もって感謝します。

20
BBaysinger

応答のAPIリファレンス を見ると、ResponseBodyを拡張していることがわかります。 Bodyを検索しようとしても、それは見つかりません。これは、おそらく公開されていないことを意味します。 Bodyのソースコード を見ると、jsonのコードが表示されます。

/**
 * Attempts to return body as parsed `JSON` object, or raises an exception.
 */
json(): any {
  if (typeof this._body === 'string') {
    return JSON.parse(<string>this._body);
  }

  if (this._body instanceof ArrayBuffer) {
    return JSON.parse(this.text());
  }

  return this._body;
}

ソースの説明が必要な場合はお知らせください。それは私にはかなり自明に見えます。

18
Paul Samsotha

実際には、HTTPクライアントのドキュメント( 応答オブジェクトの処理 )には次のように書かれています。

JSONに解析

これはAngular独自の設計ではありません。 Angular HTTPクライアントは、Fetch関数によって返される応答オブジェクトのFetch仕様に従います。この仕様は、応答本文をJavaScriptオブジェクトに解析するjson()メソッドを定義します。

したがって、Angular2は Fetch Specification を実装します。これには、前述の Body mixin の仕様が含まれます。Angular2のResponseクラスは、.json()メソッド。

json()メソッドは、呼び出されたときに、JSONを使用して消費本体を実行した結果を返す必要があります。

Peeskilletのリンクを見るとわかるように、Angular2はformData()を除くBody mixinのすべての指定されたメソッドを実装しています。

10
naeramarth7

私は同じ問題を抱えていましたが、これはエラーが消える方法です:Angular 4+の新しいバージョンでは、rxjsをインポートする必要があります:

import { map } from 'rxjs/operators';

次からインポートする代わりに:

import 'rxjs/add/operator/map';

次に、.get()を.get()に変更します。また、以下のようにangular 4+にパイプを使用する必要があります。

getCurrentTime() {
    return this._http.get<any>('http://date.jsontest.com/')
        .pipe(map((res:Response) => res.json()));
}

お役に立てば幸い...!

1
Aman