Angular 2 - 将数据从服务传递到组件
问题描述:
我创建了一个调用api来获取一些数据的服务。我想把它返回给调用组件。Angular 2 - 将数据从服务传递到组件
这是我有:
SomeComponent() {
someData = string;
constructor(
private _configService: SomeService
)
{
var value = this._configService.getKey('some-key');
console.log(value);
}
}
然后,我有一个服务:
export class ConfigService {
response:any;
constructor(private _http:Http) {}
getConfig(): Observable<any>
{
return this._http.get('src/config/config.json')
.map(response => response.json()).publishLast().refCount();
}
getKey(key:string) {
this.getConfig()
.subscribe(
data => {
if (data[key] != 'undefined')
{
return data[key]
} else {
return false;
}
},
error => {
return false;
}
);
}
}
的想法是,我可以调用方法信息getKey( '一些钥匙' ),如果该键存在于返回的json数组中,则返回数据。如果不是,则返回false。
当这个运行时,我可以看到服务中返回的对象,但它没有被返回到组件,而是我得到“未定义”。
什么是正确返回这个过程?
答
你的问题是你的处理是异步的,你在回调中不在调用方法中返回。
我会用map
运营商这样的:
getKey(key:string) {
return this.getConfig().map(data => {
if (data[key] != 'undefined') {
return data[key];
} else {
return false;
}
);
}
,并在组件:
SomeComponent() {
someData = string;
constructor(
private _configService: SomeService
) {
this._configService.getKey('some-key').subscribe(value => {
console.log(value);
});
}
}
好吧 - 给这个一去,现在收到此错误:类型错误:无法读取未定义的属性“订阅” – HappyCoder
哦,我错过了'getKey'方法中的'return'。抱歉!我相应地更新了我的答案...... –