我正在开发一个Angular2应用程序。我有一个名为submit.service.ts
的服务文件,它定义了我的GET请求:
GET(URL: string): Promise<any> {
return this.http.get(URL)
.toPromise()
.then(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
return body.data || { };
}
然后,在我的主要组件类中,我有调用GET请求的方法:
constructor(private sService:submitService, private EngageVar:EngageVariables) { }
ngOnInit() {
}
//EngageVar is a class of variables I created to store all my variables
returnDetails() {
this.EngageVar.listOfIDs = this.sService.GET('myURL' + this.EngageVar.IDSearch);
this.EngageVar.hideTable = false;
var keys = Object.keys(this.EngageVar.listOfIDs);
var len = keys.length;
this.EngageVar.lengthOfRecords = len;
}
当我拨打电话时,我可以在网络调试器中看到我得到的回复如下:
[{id:1,name:John},{id:2,name:Jane}]
但是,在我的应用程序中,当我尝试使用GET调用中的数据时,它只有[Object object]
或["__zone_symbol__state", "__zone_symbol__value"]
。我做错了什么?
答案 0 :(得分:1)
AngularJS(V1)和Angular(V2 +)在Http方面是不同的
我可以看到您在response.data
res.json();
第二,您正在将您的HTTP调用从Observable转换为Promise,这在本例中并不是一个好主意(请阅读有关RxJS的信息)
以下示例将起作用
服务:
GET(URL: string): Promise<any> {
return this.http.get(URL)
.map( (res: Response) => rs.json() );
}
控制器:
returnDetails() {
this.sService.GET('myURL' + this.EngageVar.IDSearch)
.subscribe( data => {
let keys = Object.keys(data);
this.EngageVar.hideTable = false;
this.EngageVar.listOfIDs = data;
this.EngageVar.lengthOfRecords: keys.length;
});
}