Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularHTTP客户端-如何传递嵌套的Params对象以获取API_Angular_Angular Httpclient - Fatal编程技术网

AngularHTTP客户端-如何传递嵌套的Params对象以获取API

AngularHTTP客户端-如何传递嵌套的Params对象以获取API,angular,angular-httpclient,Angular,Angular Httpclient,我使用的是angular(8)的最新版本。我正在将我的Http请求从原始Http转换为新的Http客户端。我正在调用GET API,其中我以以下方式发送嵌套参数: let data: any = {filters: {"4e9bc554-db54-4413-a718-b89ffdb91c2f": "465c1ab-2b89-4b51-8a7b-5d2ac862ee32"}, is_indexed: true} return this.httpClient.get<Register[]>

我使用的是angular(8)的最新版本。我正在将我的Http请求从原始Http转换为新的Http客户端。我正在调用GET API,其中我以以下方式发送嵌套参数:

let data: any = {filters: {"4e9bc554-db54-4413-a718-b89ffdb91c2f": "465c1ab-2b89-4b51-8a7b-5d2ac862ee32"}, is_indexed: true}
return this.httpClient.get<Register[]>('/registers/', {headers: headers, params: data});
let data:any={filters:{“4e9bc554-db54-4413-a718-b89ffdb91c2f:“465c1ab-2b89-4b51-8a7b-5d2ac862ee32”},是否索引为“真”}
返回此.httpClient.get('/registers/',{headers:headers,params:data});
在上述代码中,无法识别嵌套参数。如何使用HttpClient正确地作为嵌套参数传递?Ps在旧的Http中,使用上述代码没有问题。提前谢谢你的帮助

更新 Url将类似于以下内容:


)

您的解决方案现在应该这样实施:

import { HttpClient,HttpParams } from '@angular/common/http';

let params: any = new HttpParams();

// Begin assigning parameters
params = params.append('filters', {"4e9bc554-db54": "23473473-7938", "555555-db54": "33333-7938"});
params = params.append('is_indexed', true);
return this.httpClient.get<Register[]>('/registers/', {headers: headers, { params });
从'@angular/common/http'导入{HttpClient,HttpParams};
let params:any=新的HttpParams();
//开始分配参数
params=params.append('filters',{“4e9bc554-db54”:“23473473-7938”,“555555-db54”:“33333-7938”});
params=params.append('is_index',true);
返回此.httpClient.get('/registers/',{headers:headers,{params});

除此之外,还有一个set属性,您可以在Angular的文档中进一步查看。

您可以递归地遍历数据对象以将其展平

getData(数据:任意){
设params={};
this.buildHttpParams(params,data,“”);
返回此.httpClient.get(“…”,{params:params})
}
私有buildHttpParams(参数:任意,数据:任意,当前路径:字符串){
Object.keys(数据).forEach(key=>{
if(对象的数据[键]实例){
buildHttpParams(params,data[key],`${currentPath}${key}.`);
}否则{
参数[`${currentPath}${key}`]=data[key];
}
});
}
这将从以下位置更改我们的数据对象:

{
过滤器:{
“4e9bc554-db54-4413-a718-b89ffdb91c2f”:“465c1ab-2b89-4b51-8a7b-5d2ac862ee32”
},
“is_indexed”:真
}
致:

{
“过滤器4e9bc554-db54-4413-a718-b89ffdb91c2f”:“465c1ab-2b89-4b51-8a7b-5d2ac862ee32”,
“is_indexed”:真
}

以下是我的工作方法,通过使用
JSON序列化,以角度传递嵌套对象。stringify

const stringifiedParams = JSON.stringify(this.filterParams);
return this.http.get<any[]>(`jobs`, {params: {filter: stringifiedParams}});

您是否尝试过使用
让params=new HttpParams();
传递param:data,还有一件事是将值作为数据中的字符串传递。将此
更改为
索引为:“true”
JSON.stringify()`可以帮助您。您想要的查询字符串的结构是什么?您能提供所需url的示例吗?此文档可以帮助您进一步了解示例url(不相同,但与示例类似)是的,只是测试了它不起作用。“过滤器”需要一个字符串a值,当我对它进行字符串化时,API不会将其识别为嵌套对象,但字符串值我会在几个小时内检查此项,然后与您联系
filter = JSON.parse(req.query.filter.toString());