2017-11-10 83 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