Reputation: 7288
I have exactly angular version 4.3.2 and I cannot update because of dependencies. So for now I stick to this version. I have object with dynamic params (there can be other keys and values inside):
let query = {
param1: 1,
param2: 'a'
}
and I want to do something like:
params = new HttpParams();
params = params.append(query);
return this.httpClient.get(this.config.apiUrl + '/items', {
params: params,
headers: headers
});
but there is not such params.append(query) method. So I need to iterate over the query keys and to add them one by one to the params. Is there easier solution for this?
Edit1:
according this answer this can be done since angular 5.0.0-beta.6 (2017-09-03), but is not solution for me. https://stackoverflow.com/a/46317900/1995258
Upvotes: 10
Views: 18127
Reputation: 2234
If your object is typed you cannot use fromObject
since you will encounter
The value of fromObject has type restrictions: either (1) all the keys and values must be strings or (2) it must be a ReadonlyArray<string>. cf.
I've managed to create dynamically the httpParams
by appending the property one by one with the following technique:
export interface NameFilter {
sort:string,
start:number,
end:number,
like:string
}
const mockFilter:NameFilter = {
end:12,
start:0,
sort:"name",
like:"test"
}
let httpParams:HttpParams = new HttpParams();
type ObjectKey = keyof typeof filter;
Object.keys(filter).forEach(
function (key) {
httpParams=httpParams.append(key,
String(filter[key as ObjectKey]));
}
);
return this.http.get<Name[]>(this.baseUrl+"/search",{params:httpParams})
Upvotes: 0
Reputation: 78
it will be work
let params = new HttpParams();
params = params.append('param1', '1' )
params = params.append('param2', 'a' )
Get URL be like
this.HttpClient.get(this.config.apiUrl + '/items', { params:params}).subscribe(
(response)=>{
console.log(response)
})
Upvotes: 0
Reputation: 21
let query = {
param1: 1,
param2: 'a'
}
params = new HttpParams();
params = params.appendAll(query);
return this.httpClient.get(this.config.apiUrl + '/items', {
params: params,
headers: headers
});
You can also achive this way
Upvotes: 0
Reputation: 7119
It can be done by using fromObject property
const params = {
email:'[email protected]',
password:'qwerty'
}
const body = new HttpParams({fromObject: params})
Upvotes: 20
Reputation: 86
I solved it that way:
const params: HttpParams = new HttpParams().set('filters', JSON.stringify(filters));
Upvotes: 6