Typescript 动态设置HttpParams()主体
在Angular 5 HttpClient中,我可以这样设置HttpParams()Typescript 动态设置HttpParams()主体,typescript,angular6,angular-httpclient,Typescript,Angular6,Angular Httpclient,在Angular 5 HttpClient中,我可以这样设置HttpParams() const body=new-HttpParams() .set('电子邮件','test@mail.com') .set('password','pass'); 但是当我试图以这种方式设置HttpParams()时。未设置这些值 const paramsMap=newmap(); 参数映射集(“电子邮件”test@mail.com"); 参数集(“密码”、“通行证”); paramsMap.forEach(
const body=new-HttpParams()
.set('电子邮件','test@mail.com')
.set('password','pass');
但是当我试图以这种方式设置HttpParams()时。未设置这些值
const paramsMap=newmap();
参数映射集(“电子邮件”test@mail.com");
参数集(“密码”、“通行证”);
paramsMap.forEach((值:任意,键:任意)=>{
body.set(键、值);
});
为什么它没有被设定?我怎样才能以类似的方式做到这一点呢?API略有不同,通过这种方式,您可以发送查询字符串中带有参数的动态请求
let paramsMap = new Map<any,any>();
paramsMap.set('username','admin');
paramsMap.set('password','admin');
let params = new HttpParams();
paramsMap.forEach((value: any, key: any) => {
params = params.set(key, value);
});
return this.http.request<any>('post', this.url + LOGIN_URL, { 'params': params});
让paramsMap=newmap();
paramsMap.set('username','admin');
paramsMap.set('password','admin');
设params=newhttpparams();
paramsMap.forEach((值:任意,键:任意)=>{
参数=参数集(键、值);
});
返回this.http.request('post',this.url+LOGIN_url,{'params':params});
如果您检查HttpClient方法,您可以看到它是如何工作的
对第一条评论的回答:
HttpParams它不是不可变的,它用于将参数传递给查询字符串。
所以你需要的是:
let paramsMap = new Map<any,any>();
paramsMap.set('email','test@mail.com');
paramsMap.set('password','pass');
return this.http.post<any>(this.url + LOGIN_URL, mapToObject(paramsMap));
/**
* recursive function that receive a Map and returns a JSON object
* @param map
* @returns {any}
*/
function mapToObject(map) {
const out = Object.create(null)
map.forEach((value, key) => {
if (value instanceof Map) {
out[key] = mapToObject(value)
}
else {
out[key] = value
}
});
return out
}
让paramsMap=newmap();
paramsMap.set('email','test@mail.com');
paramsMap.set('password','pass');
返回this.http.post(this.url+LOGIN_url,mapToObject(paramsMap));
/**
*接收映射并返回JSON对象的递归函数
*@param-map
*@returns{any}
*/
函数mapToObject(映射){
const out=Object.create(空)
map.forEach((值,键)=>{
if(映射的值实例){
out[key]=mapToObject(值)
}
否则{
out[键]=值
}
});
返回
}
HttpParams是不可变的,因此每次使用set()方法时,它都会返回一个新实例。您可以通过更新引用来解决此问题:
const参数={
测试:“正确”
}
设httpParams=newHttpParams();
Object.keys(params.forEach)(k=>{
httpParams=httpParams.set(k,params[k]);
});
log(httpParams.get('test')代码>请尝试以下操作:
让searchParams=new-HttpParams();
for(对象条目的常数[k,v](数据)){
log(`${k}:${v}`);
如果(v!=''| | v!==未定义){
searchParams=searchParams.append(k,v);
}
}
谢谢你的回答。但这永远不会奏效。HttpParams()是不可变的,因此这些值不会设置HttpParams()。@Fire手套我面临着同样类型的问题,如果可能的话,你能帮我吗