Angular 2 - 将数据从服务传递到组件

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); 
    }); 
} 

}

+0

好吧 - 给这个一去,现在收到此错误:类型错误:无法读取未定义的属性“订阅” – HappyCoder

+0

哦,我错过了'getKey'方法中的'return'。抱歉!我相应地更新了我的答案...... –