Angular 4:从组件中使用的服务内部提供数据

时间:2017-12-01 18:18:19

标签: angular

以下是我的情景:

我想使用服务向我提供api调用的结果,而不必在组件中使用api get方法。这就是我想在服务中调用的内容:

private getData():Observable<Data>{
    const url = 'myUrl';
    return this.http.get<Data>(url).pipe(
  catchError(this.handleError<Data>('getData'))
);

然后:

 constructor(private http: HttpClient) {
 this.getData().subscribe(t => {
  this.Data = t;
  console.log(this.Data);
  });
}

但是,当我这样称呼时:

retrieveData(): Data{
  return this.Data;
}

在组件中,它返回undefined。我知道这是一个时间问题,但我不清楚我应该如何区别对待。呼叫应该在哪里,以便我可以使用它?我在整个应用程序中使用此服务来维护单个对象,以便在更新调用api之前预览更改。

编辑: 这是我尝试调用的一个示例,只是为了看看我是否可以先获取数据:

ngOnInit() {    
  console.log(this.service.retrieveData());
}

(在用于更改Data类对象的组件内)

另一个编辑:该服务在app.module.ts

中声明 Aaaand还有一件事让我意识到我没有澄清。上面的构造函数调用是在服务中,而不是组件。组件应该调用的唯一内容是检索方法

1 个答案:

答案 0 :(得分:0)

最好在请求完成之前检查undefined。

constructor(private http: HttpClient) {
    this.getData().subscribe(t => {
      if (JSON.stringify(t) != {}) {
        this.Data = t;
        console.log(this.Data);
      }
    });
  }