web-dev-qa-db-ja.com

Angular 4.3のHttpパラメーター

Angular 4.3。で出てきた新しいhttpクライアントを使用しようとしています。ドキュメントを確認し、HttpParamsクラスを使用していますが、機能していないようです。または私は何か間違ったことをしています。ここに私が持っているものがあります:

delete(personId: string) {
    const params = new HttpParams();
    params.set('personId', personId);
    return this.http.delete(`${this.baseUrl}`, {
      params
    });
  }

しかし、リクエストを行うとき、私のURLにはクエリパラメータがありません

11
ocespedes

パラメーターは不変になりました したがって、新しいHttpParamsを開始するときにそれらを設定する必要があります すべてのset()は新しいインスタンスを返し、変更を適用します。試して

const params = new HttpParams()
    .set('personId', personId);

4.3のヘッダーとURLパラメーターをカバーするドキュメントを次に示します- https://angular.io/guide/http#headers


編集:HttpParamsクラスを開始するときに必ずしもパラメーターを設定する必要がないという答えと状態を更新したかった。たとえば、forループ内またはHttpParams初期化の外部でパラメーターを設定する必要がある場合は、次の方法で設定できます。

const params = new HttpParams()
    .set('personId', personId);

params = params.set('personName', personName);

ドキュメントが述べているように:

HttpHeadersクラスは不変であるため、すべてのset()は新しいインスタンスを返し、変更を適用します。

20
LLai

HttpParamsは不変です。

set()は、set()が呼び出されるインスタンスを変更せずに、新しいHttpParamsインスタンスを作成して返します。

したがって、コードは

const params = new HttpParams().set('personId', personId);

この新しいHttpParamsを使用するときに苦労したもう1つのことがあります。時々、n個のパラメータを渡す必要があります。そのとき、パラメータオブジェクトを変換する関数があると便利ですHttpParamsの前にAngular 4.3)を使用していました。

一般的に使用されるサービスでtoHttpParams関数を作成することをお勧めします。したがって、関数を呼び出してオブジェクトをHttpParamsに変換できます。

/**
 * Convert Object to HttpParams
 * @param {Object} obj
 * @returns {HttpParams}
 */
toHttpParams(obj: Object): HttpParams {
    return Object.getOwnPropertyNames(obj)
        .reduce((p, key) => p.set(key, obj[key]), new HttpParams());
}

更新:

5.0.0-beta.6(2017-09-03)以降、新しい機能が追加されました( HttpClientヘッダーとparamsのオブジェクトマップを受け入れる

HttpParamsの代わりに、オブジェクトを直接渡すことができます。

これは、上記のtoHttpParamsのような1つの一般的な関数を使用した場合のもう1つの理由であり、必要に応じて簡単に削除したり変更したりできます。

2
Lahar Shah