web-dev-qa-db-fra.com

Comment passer un tableau dans une chaîne de requête dans HttpClient?

Ceci est mon tableau d'acteurs:

['Elvis', 'Jane', 'Frances']

Comment passer ce tableau dans une chaîne de requête dans HttpClient?

J'ai essayé d'utiliser: 

1) 

let params = new HttpParams();
params = Params.append('actors[]', ['Elvis', 'Jane', 'Frances']);
this.http.get(url, { params: Params });

2) 

let params = new HttpParams().set('actors[]', ['Elvis', 'Jane', 'Frances']);
this.http.get(url, { params: Params });

3) 

let Params = new HttpParams();
Params = Params.append('actors[]', 'Jane');
Params = Params.append('actors[]', 'Elvis');
Params = Params.append('actors[]', 'Frances');
this.http.get(url, { params: Params }); 

1 et 2 ne fonctionnent pas alors TypeScript donne:

[ts] L'argument de type 'chaîne []' n'est pas assignable au paramètre de type 'chaîne'.

3 envoie un seul élément 'acteurs []': 'Frances'

3
Dmitry Grinko

Je pense que le meilleur moyen est de les ajouter aux paramètres en tant que string et de le reconvertir en back-end en un array ou un list.

let actorList = ['Elvis', 'Jane', 'Frances']
let params = new HttpParams();
params = Params.append('actors', actorList.join(', ');
this.http.get(url, { params: Params });
9
Venomy

Fonctionne sur Angular 6.0.6:

private getParams(query) {
let params: HttpParams = new HttpParams();
for (const key of Object.keys(query)) {
  if (query[key]) {
    if (query[key] instanceof Array) {
      query[key].forEach((item) => {
        params = params.append(`${key.toString()}[]`, item);
      });
    } else {
      params = params.append(key.toString(), query[key]);
    }
  }
}
return params;

}

Résultat: 

/api/message?page=1&per=2&order_by=name&order_direction=asc&base_object%5B%5D=2&base_object%5B%5D=1
3

J'utilise URLSearchParams au lieu de HttpParams.

Avec URLSearchParams, vous devez stringifier votre tableau pour le définir sur votre paramètre "Key-Value-Store".

import { URLSearchParams } from '@angular/http';


let params: URLSearchParams = new URLSearchParams();
params.set('actors', JSON.stringify(yourArrayHere));

Je pense que cela devrait fonctionner de la même manière avec HttpParams, car les deux utilisent un mappage Key-Value dans la méthode set, alors essayez-le.

J'espère que cela pourra vous aider.

METTRE À JOUR:

let options = new RequestOptions({search: params});

this._http.get(url, options).map(...)

avec RequestOptions, vous pouvez également modifier l'en-tête et d'autres options de demande.

1
marvstar

Cela a fonctionné pour moi.

let params = new HttpParams();

['Elvis', 'Jane', 'Frances'].forEach((actorName:string) =>{
  params = params.append(`actors[]`, actorName);
})

OU

let params = new HttpParams();
let actorsArray:Array<string> = ['Elvis', 'Jane', 'Frances'];

actorsArray.forEach((actorName:string) =>{
  params = params.append(`actors[]`, actorName);
})
0
Ifeanyi Chukwu