import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/Rx';
import {Observable} from 'rxjs/Rx';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class GeoService {
constructor(private http: Http) { }
private extractData(res : any){
if(res.status < 200 || res.status >=300){
throw new Error('Bad response sttus:' + res.status);
}
this.serviceData = (res.json());
return this.serviceData || {};
}
loaddata(term: string): Observable<any> {
return this.http.get('http://maps.google.com/maps/api/geocode/json?address=' + term + 'CA&sensor=false')
.map(this.extractData);
}
}
为什么它说'属性'serviceData'不存在于类型GeoService'?
最佳答案
好吧,事实并非如此,当您在 extractData
函数中尝试引用 this.serviceData
时,您还没有在服务中的任何地方声明它。
尝试:
private extractData(res : any){
if(res.status < 200 || res.status >=300){
throw new Error('Bad response sttus:' + res.status);
}
let serviceData = res.json(); // declare here!
return serviceData || {};
}
另一种选择是你在你的服务中实际声明了 serviceData,然后你可以在你的函数中使用
this
。export class GeoService {
private serviceData;
....
// and then use this:
private extractData(res : any){
if(res.status < 200 || res.status >=300){
throw new Error('Bad response sttus:' + res.status);
}
this.serviceData = (res.json());
return this.serviceData || {};
}
}
然后你可以在组件中使用这些,即在你的
OnInit
方法或构造函数中调用服务中的函数:data; // declare a variable where you want to store the data
constructor(private geoService: GeoService) {
this.geoService.loaddata()
.subscribe(data => {
this.data = data;
console.log(this.data); // your values here!
});
}
不过,我建议您在 OnInit 方法中执行此操作。
关于angular - '属性 'serviceData' 在 'GeoService' 类型上不存在。' typescript Angular2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41850900/