Multiple Objects into HttpParams
You can create object containing all parameters and pass this object to fromObject
property of HttpParamOptons
while creating HttpParams
let data={
firstname:'xyz',
lastname:'pqr'
}
let body=new HttpParams({fromObject:data})
this.http.post(URL, body, this.header).subscribe(data => {
....
}, error => {
....
})
You can use .append
to append values to a parameter and give you the result you are looking for when dealing with an array of values. .set
is used to set or replace a value for a parameter. So really you should be doing something more like the following:
let httpParams = new HttpParams()
.set('title', this.createNewForm.controls['title'].value)
.set('content', this.createNewForm.controls['content'].value);
categoryIds.forEach(id => {
httpParams = httpParams.append('categoryId', id);
});
const requestOptions = {
params: httpParams,
withCredentials: true
};
It's not obvious, but the .append
method does not mutate the HttpParams
object it was called from but instead returns a new object. This is why we reassign httpParams
in the example above. Also, .append
can be called without first using .set
to set the parameter.
May be this is what you are looking for
component file:
import { Component } from '@angular/core';
import { HttpParams } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
data = [
{id:'_', title:'_', content:'_'},
....,
....
];
mainArr:any = [];
constructor(){}
getCategory(item){
this.mainArr.push({title:item.title,content:item.content,categoryId:item.id});
console.log('mainArr',this.mainArr);
let requestOptions = {
params: new HttpParams()
.append('data', this.mainArr),
withCredentials: true
}
console.log('requestOptions',requestOptions);
}
}