Angular EventEmitter返回未定义的对象

时间:2018-11-25 20:40:11

标签: angular typescript

我正在为一个学校项目工作,由于对Angular的缺乏经验,我碰壁了。我有一个带有一组复选框选择的左侧导航组件,当用户选择“代码”之一时,API调用转到我们的数据存储区以检索给定“键”的所有值

this.dataService.getData(key);

从那时起,我得到了一个不同的组件,该组件正在侦听数据的检索,然后将创建一个图形。 我面临的问题是数据服务成功地进行了API调用并返回了JSON响应,但我不知道如何将数据/对象传递给时间图。

private segResponse$: Observable<SegmentResponse>;    
@Output() dataRetrieved: EventEmitter<Observable<SegmentResponse>> = new EventEmitter();
    ...
getData(key: string) {
    this.segResponse$ = this.httpClient.get<SegmentResponse>(this.baseUrl + key);
    console.log('seg resp in service ' + this.segResponse$);
    this.dataRetrieved.next(this.segResponse$);
}

我可以在这里看到控制台响应,但是在我的时间图中,对象(SegmentResponse类型)未定义。 “状态”只是SegmentResponse的属性(字符串)之一。

ngOnInit() {
  this.dataService.dataRetrieved.subscribe( data => {
  this.segResponse = data;
  console.log('time graph got data ' + this.segResponse.state);
  });
}

那么为什么它首先是未定义的?我需要怎么做才能将SegmentReponse从数据服务成功获取到时间表? 我猜.next部分不是在等待httpClinet.get的成功返回,而是像我说的那样,我对Angular + search-fu能够找到正确的单词的知识非常了解。得到解决方案。

1 个答案:

答案 0 :(得分:0)

httpClient.get返回一个Observable。您需要订阅它。

getData(key: string) {
    this.segResponse$ = this.httpClient.get<SegmentResponse>(this.baseUrl + key).subscribe((response) => {
        console.log('seg resp in service ' + response);
        this.dataRetrieved.next(response);
    });
}