2017-11-10 152 views
0

我正在使用最新的角度,導入和其他角度的東西都很正常。我有這樣的代碼:在JSON角度無法從服務器獲取數據

...class definition 
ngOnInit(){ 
this.http.get("http://localhost:5000/getData").subscribe(data => { 
    this.data = data; 
}); 
} 

localhost:5000/getData返回數據。而角是在http://localhost:4200/,它有它自己的路由器。數據是正確的,但我無法在subscribe()方法之外使用此數據(沒有錯誤,只是this.data字段爲空)。我錯在哪裏?我應該怎麼做才能解決這個問題?(我用相同的原產地政策修復了問題,因爲其他方面的工作都是正常的)。我必須將服務器中的數據顯示到我的組件中;

+0

當你試圖使用你正在得到什麼錯誤?和你在哪裏使用? – Aravind

+0

我沒有任何錯誤,我的this.data是空的,這就是全部 –

+0

它一直是空的嗎?你在哪裏使用'this.data' – Aravind

回答

1

訂閱是異步的,你不能得到的價值,而這樣一來,該值尚未公佈,如果你有一些動作做數據的組件的初始化,您可以調用一個函數內部訂閱:

this.http.get("http://localhost:5000/getData").subscribe(data => { 
    this.data = data; 
    this.doAction(this.data); 
}); 

可以使用異步管道在視圖中顯示的數據: 改變你的代碼,並使用.MAP從而可觀察到的將被退回:

import 'rxjs/add/operator/map'; 
this.data= this.http.get("http://localhost:5000/getData") 
       .map(response => response.json()); 

,並在您的視圖使用異步管道,沒有必要訂閱

<div *ngFor="let item of (data | asyn)"> {{item}}</div> 
+0

我只需要將數據顯示到組件 –

+0

我更新了代碼 –

+0

我必須從rxjs中使用map()嗎? –

0
private display = "downloading";  
    ngOnInit(){ 
    new Promise((resolve,reject)=>{ 
     this.http.get("http://localhost:5000/getData").subscribe(data => { 
     resolve(data);     
     });  
    }).then(data=>{ 
     if(data['someKey']!==undefined){ 
     this.display = "downloaded";  
     this.data = data;    
     }else{this.display = "noData";} 
    }); 
    } 

這是我的解決方案,我表現出不同的景色,而數據從服務器加載。視圖取決於display