如何在Angular 2/4

时间:2017-07-27 06:42:16

标签: javascript php angular

我的服务:

fetchData(url,request)
  {
    return this.http.post(this.apiUrl+url,request).subscribe(
        (response) => {return response.json()}
    );
  }

我的组件:

ngOnInit()
    {
        this.response = this.dataService.fetchData('friends/grow_network',{});
        console.log('s ',this.response);
    }

如果我在服务中控制response.json()它会显示来自api的正确数据但是如果我在组件中控制它会显示如下:

Subscriber {closed: false, _parent: null, _parents: null, _subscriptions: Array(1), syncErrorValue: null…}

如何获取来自api而非订阅者数据的组件中的数据?

2 个答案:

答案 0 :(得分:2)

您可以在角度中使用Observables。请查看以下讨论

Angular - Promise vs Observable

现在尝试以下代码而不是组件中的代码

 this.response = this.dataService.fetchData ('friends/grow_network'{})
                 .subscribe(res=> { console.log(res);
                 }), error => alert(error);

您的服务代码应为

fetchData(url,request)
  {
    return this.http.post(this.apiUrl+url,request).map(
        (response) => {return response.json()}
    );
  }

答案 1 :(得分:2)

当你按照自己的方式行事时,你在变量中写入“响应”可观察对象而不是结果。调用方法时,结果的值尚未存在,因为它将是异步的。

要获得您想要的内容,您必须执行以下操作:

fetchData(url,request)
  {
    return this.http.post(this.apiUrl+url,request).map(
        (response) => {return response.json()}
    );
  }

ngOnInit()
    {
        this.response = this.dataService.fetchData('friends/grow_network',{})
                         .subscribe(result => {
                           this.response = result;
                           console.log('s ',this.response);
                         });

    }