angular - Angular EventEmitter 返回未定义的对象
问题描述
我正在为学校做一个项目,但由于我对 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 的知识处于边缘,能够找到正确的单词去查找得到解决方案。
解决方案
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);
});
}
推荐阅读
- reactjs - React Native:StackNavigator ....如何从 ListView 项目导航到另一个页面?
- javascript - 使用浏览器中的开发者工具控制台减少空闲时间
- android - Conflict with dependency app的解决方法是什么:preDebugAndroidTestBuild
- api - 修复 Web 服务器上不安全的 HTTP 方法
- python-3.x - 如何暂停亚马逊 lex 机器人?
- lua - 如何在 Lua 中获取表的命令行参数?
- php - 卷曲 404(雅虎)
- javascript - 如何使用 javascript 实现使用 xbox 登录?
- apache - MAC 10.12.6 上 MAMP 4.1.1 的虚拟主机不工作
- php - 如何在 Laravel 5.6 中使用 .env 中的值