Angular无法从服务器获取数据

时间:2017-11-10 20:57:38

标签: angular http

我使用最新的角度,进口和其他角度的东西是正常的。我有这样的代码:

<div class="ExerciseRoutine">
    <input type="button" value="hide" onClick="hideRoutine(this);" />
        <hr/>
        <div class="ExerciseType">...</div>
        <br/>
</div>

<script type="text/javascript">
     function hideRoutine(event){
        // just in case you need to access the element id
        var elementId = event.id,
        parentElement = event.parentElement.className;
        $('.'+parentElement+'').find('.ExerciseType').hide();
     }
</script>

...class definition ngOnInit(){ this.http.get("http://localhost:5000/getData").subscribe(data => { this.data = data; }); } 返回json中的数据。而角度在localhost:5000/getData上,它有自己的路由器。数据是正确的,但我无法在http://localhost:4200/方法之外使用此数据(没有错误,subscribe()字段为空)。我哪里错了?我应该怎么做才能解决这个问题?(我修复了同一原产地政策的麻烦,因为其他事情都是正常的)。我必须将数据从服务器显示到我的组件中;

2 个答案:

答案 0 :(得分:1)

subscribe是异步的,你不能在组件初始化的时候获取值,这个值还没有,如果你有一些与数据有关的动作,你可以在subscribe中调用一个函数: / p>

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

您可以使用异步管道在视图中显示数据: 更改您的代码并使用.map,因此将返回一个Observable:

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>

答案 1 :(得分: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