Javascript 这不会访问http响应对象:类型对象上不存在属性
我有一个响应对象,我刚刚分配给“this”对象Javascript 这不会访问http响应对象:类型对象上不存在属性,javascript,angular,typescript,ecmascript-6,Javascript,Angular,Typescript,Ecmascript 6,我有一个响应对象,我刚刚分配给“this”对象 如果我访问datacentersinfo对象,则类型对象上不存在属性datacentersinfo。由于此错误,我无法生成dist文件夹 我建议您使用强类型object,并执行以下操作 import { Injectable } from '@angular/core'; import { Http, Headers, RequestOptions, Response, ResponseContentType } fro
如果我访问
datacentersinfo
对象,则类型对象上不存在属性datacentersinfo
。由于此错误,我无法生成dist文件夹 我建议您使用强类型object,并执行以下操作
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions,
Response, ResponseContentType } from '@angular/http';
GetAllCriteria(): Observable<Array<ClassName>> {
let headers = new Headers({
'Content-Type': 'application/json'
});
let options = new RequestOptions({ headers: headers });
return this._http.get(this.apiUrl + "/GetAllCriteria",
options).subscribe(response => response.json());
}
从'@angular/core'导入{Injectable};
导入{Http,头,请求选项,
响应,ResponseContentType}来自“@angular/http”;
GetAllCriteria():可观察{
让标题=新标题({
“内容类型”:“应用程序/json”
});
let options=newrequestoptions({headers:headers});
返回此。\u http.get(this.apiUrl+“/GetAllCriteria”,
订阅(response=>response.json());
}
您有几种解决方案:
1-将您的数据键入任意,不要将其实例化:
private data: any;
2-改变你的状况:
if(this.data && this.data.datacentersinfo && this.data.datacentersinfo.length) {}
这将解决您的问题 我将发布两种方法来实现这一点。首先是旧方法(看起来像是您正在尝试的方法),然后是使用HTTP客户端的首选方法 旧HTTP
private data: Object = {};
this.http.post('url', { })
.map((res: Response) => res.json())
.subscribe((res:any) => {
console.log(res);
this.data = res;
if(this.data.datacentersinfo.length) {}
});
HTTP客户端
private data: Object = {};
this.http.post<any>('url', { })
.subscribe((res:any) => {
console.log(res);
this.data = res;
if(this.data.datacentersinfo.length) {}
});
私有数据:Object={};
this.http.post('url',{})
.订阅((res:any)=>{
控制台日志(res);
这个数据=res;
if(this.data.datacentersinfo.length){}
});
我这样做并不是最好的方式,您应该创建一个处理HTTP请求的服务组件,然后从该组件调用该服务并订阅它的响应。如果他使用的是HttpClient,它将无法工作。@trichetriche-在顶部导入时添加此项{Http,Headers,RequestOptions,Response,ResponseContentType}来自“@angular/Http”;@trichetriche-为什么?你认为没有数据..或者它是空的..这是必需的我认为res.json();将行json数据转换为类型为ScriptNo的对象,因为Angular会反对Http模块而支持HttpClient,HttpClient已经解析了对json的响应。这在他们的Http指南中:)请参见@Wesley的答案,他解释了!dist已生成!!
private data: Object = {};
this.http.post<any>('url', { })
.subscribe((res:any) => {
console.log(res);
this.data = res;
if(this.data.datacentersinfo.length) {}
});