2016-04-21 113 views
1

我創建了一個調用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。

當這個運行時,我可以看到服務中返回的對象,但它沒有被返回到組件,而是我得到「未定義」。

什麼是正確返回這個過程?

回答

5

你的問題是你的處理是異步的,你在回調中不在調用方法中返回。

我會用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'。抱歉!我相應地更新了我的答案...... –

相關問題