Angular 4.3。で出てきた新しいhttpクライアントを使用しようとしています。ドキュメントを確認し、HttpParams
クラスを使用していますが、機能していないようです。または私は何か間違ったことをしています。ここに私が持っているものがあります:
delete(personId: string) {
const params = new HttpParams();
params.set('personId', personId);
return this.http.delete(`${this.baseUrl}`, {
params
});
}
しかし、リクエストを行うとき、私のURLにはクエリパラメータがありません
パラメーターは不変になりました したがって、新しい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()は新しいインスタンスを返し、変更を適用します。
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つの理由であり、必要に応じて簡単に削除したり変更したりできます。