How to pass an array within a query string in HttpClient?
77,270
Solution 1
I think the best way is to add them to parameters as a string
and have your back-end convert it back to an array
or list
.
let actorList = ['Elvis', 'Jane', 'Frances']
let params = new HttpParams();
params = params.append('actors', actorList.join(', '));
this.http.get(url, { params: params });
Solution 2
Works on 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;
}
Result:
/api/message?page=1&per=2&order_by=name&order_direction=asc&base_object%5B%5D=2&base_object%5B%5D=1
Solution 3
You can simply do this by using JSON.stringify()
let params = new HttpParams();
const actors = ['Elvis', 'Jane', 'Frances'];
params.append('actors', JSON.stringify(actors);
this.http.get(url, { params });
Solution 4
According the interface you can do that like
const params = new HttpParams({
fromObject: { 'actors[]': ['Elvis', 'Jane', 'Frances'] }
});
this.http.get(url, { params });
Solution 5
This worked for me.
let params = new HttpParams();
['Elvis', 'Jane', 'Frances'].forEach((actorName:string) =>{
params = params.append(`actors[]`, actorName);
})
OR
let params = new HttpParams();
let actorsArray:Array<string> = ['Elvis', 'Jane', 'Frances'];
actorsArray.forEach((actorName:string) =>{
params = params.append(`actors[]`, actorName);
})
Author by
Dmitry Grinko
Updated on July 09, 2022Comments
-
Dmitry Grinko almost 2 years
This is my array of actors:
['Elvis', 'Jane', 'Frances']
How to pass this array within a query string in HttpClient?
I tried to use:
1)
let params = new HttpParams(); params = Params.append('actors[]', ['Elvis', 'Jane', 'Frances']); this.http.get(url, { params: Params });
let params = new HttpParams().set('actors[]', ['Elvis', 'Jane', 'Frances']); this.http.get(url, { params: Params });
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 });
1st and 2nd snippets don't work because of TypeScript error:
[ts] Argument of type 'string[]' is not assignable to parameter of type 'string'.
3rd snippet sends only one item
'actors[]': 'Frances'