104
let httpParams = new HttpParams().set('aaa', '111');
httpParams.set('bbb', '222');

なぜこれが機能しないのですか?「aaa」のみを設定し、「bbb」は設定しません

また、オブジェクト { aaa: 111, bbb: 222 } があります。ループせずにすべての値を設定するにはどうすればよいですか?

更新 (これは機能しているようですが、どうすればループを回避できますか?)

let httpParams = new HttpParams();
Object.keys(data).forEach(function (key) {
     httpParams = httpParams.append(key, data[key]);
});
4

15 に答える 15

95

HttpParams は不変であることを意図しています。setメソッドとメソッドは、既存のappendインスタンスを変更しません。代わりに、変更が適用された新しいインスタンスを返します。

let params = new HttpParams().set('aaa', 'A');    // now it has aaa
params = params.set('bbb', 'B');                  // now it has both

このアプローチは、メソッド チェーンでうまく機能します。

const params = new HttpParams()
  .set('one', '1')
  .set('two', '2');

...条件でそれらのいずれかをラップする必要がある場合、それは厄介かもしれません。

返された新しいインスタンスへの参照を取得しているため、ループが機能します。あなたが投稿したコードは機能しません。set() を呼び出すだけで、結果を取得しません。

let httpParams = new HttpParams().set('aaa', '111'); // now it has aaa
httpParams.set('bbb', '222');                        // result has both but is discarded
于 2017-07-31T23:35:29.993 に答える
0

set() の使用

set() のAngular公式ドキュメントから

set(param: string, value: string | number | boolean): HttpParams

戻り値 HttpParams: 新しい値を持つ新しいボディ。

それでは、いくつかのパラメーターを追加する方法を見てみましょう -

const params = new HttpParams()
    .set('aaa', '111')
    .set('bbb', "222");

set() メソッドをチェーンして HTTPParams オブジェクトを作成していることに注意してください。その理由は、HTTPParams が immutable であるためです。

set メソッドを呼び出すたびに、新しい値を持つ新しい HttpParams オブジェクトが返されます。最初に返された HttpParams オブジェクトを取得し、それを使用してさらに変更する必要があります。

したがって、次のようにするとうまくいきません

const params = new HttpParams(); // empty HttpParams object

params.set('aaa', '111'); // lost
params.set('bbb', "222"); // lost

呼び出しているだけでset、返されたHttpParamsオブジェクトを保持していません。したがって、最後に空の HttpParams objectがあり、set への 2 つの呼び出しは効果を追加しません。それを機能させるには、次のことを行う必要があります-

const params = new HttpParams(); // empty HttpParams object

params = params.set('aaa', '111'); // storing the returned HttpParams object, now **it has aaa**
params = params.set('bbb', "222"); // add another parameter and store it. so now **it has both aaa and bbb**

fromString の使用

fromString を使用して httpParams を作成することもできます。クエリ パラメーター文字列が既に用意されている場合に便利です。次の構文を使用してそれを行うことができます

const params = new HttpParams({
  fromString: 'aaa=111&bbb=222'
});
于 2021-08-19T07:56:23.463 に答える