2016-06-17 31 views
1

我正在學習Angular 2,我需要將我的服務的結果分配給我的組件的構造函數中的數據變量。 如何在構造函數中使用訂閱數據並將此值分配給我的公用數據數組?如何在Angular 2構造函數中分配訂閱數據?

public data: Array<any> =[]; 

public constructor(private _languageService: LanguageService){ 

    this._languageService.getLanguages() 
    .subscribe(languages => {this.languages =languages;} 
     ,error => this.errorMessage = <any>error) 

    this.length = this.data.length; 
    //How i can set this.data = this.languages 
    //if this.languages is empty outside the subscribe? 
} 

我真的很感激,如果有人能向我解釋如何分配服務返回給一個變量的數據。

回答

1

我們必須分配.subscribe()

public data: Array<any> =[]; 

public constructor(private _languageService: LanguageService){ 

    this._languageService 
     .getLanguages() 
     .subscribe(languages => { 
      this.languages =languages; 
      [].push.apply(this.data, languages); 
     },error => this.errorMessage = <any>error) 

    ... 
} 

構建體[].push.apply(target, source)將推動所有未來值對現有數組引用的內所有值

EXTEND

我們可以通過加載數據可觀察到的來源,然後消耗一旦它們可用。我們在模板中使用*ngIf

<div> 
    <some-component 
     *ngIf="myData" 
     [bindSource]="myData" 
     ... 
    ></some-component> 
</div> 

而在組件,我們可以訂閱獲得這些數據:

public myData: any[] =[]; 

public constructor(private _languageService: LanguageService){ 

    this._languageService 
     .getLanguages() 
     .subscribe(languages => { 
      this.myData = languages; 
     }); 
} 
+0

謝謝你,我已經嘗試此,但數據數組的值仍然是在構造空如果我在訂閱之外做了一個console.log(this.data)。那爲什麼我的ng2表不加載數據。我有更多的代碼在這篇文章中:http://stackoverflow.com/questions/37844511/load-ng2-table-data-form-api –

+0

那麼..這是......合乎邏輯的。構造函數是一個你訂閱的地方。這就是它..代碼離開它,並繼續在其他地方執行..稍後,一旦觀察者(您已訂閱)將發射值..subscribe被觸發。所以..沒有辦法如何消費價值..未來..直接在構造函數中。這就是我們訂閱的原因......它有點幫助嗎? –

+0

謝謝,但現在我不明白我如何從我的服務中獲取數據並加載數組中的數據以填充ng2表。 http://stackoverflow.com/questions/37844511/load-ng2-table-data-form-api,還有另一種方式來從服務的cosntructor填充該數組? –