【发布时间】:2019-10-31 07:44:31
【问题描述】:
我正在为我的第一个应用学习 Ionic/Angular。我必须在初始化时从 API 加载数据并将它们显示在我的视图中。
在我的代码中,我正在调用包含ngOnInit() 上的 API 调用的异步函数。我想从特定参数初始化数据。
问题是:当ngOnInit()被调用时,异步函数还没有完成,所以我的vars是null。
我该怎么做?
代码如下:
async getData(id) {
try {
const url = 'http://url/api/pages/'+id;
const params = {};
const headers = {};
const response = await this.http.get(url, params, headers);
console.log(JSON.parse(response.data));
this.page = JSON.parse(response.data);
} catch (error) {
console.error(error.status);
console.error(error.error);
console.error(error.headers);
}
}
ngOnInit() {
this.getData(11);
}
以及带有 var 页面的视图:
<p>{{ page.text }}</p>
【问题讨论】:
-
试试
<p>{{ page?.text }}</p>。这样,您将检查page是否具有text属性。 -
好的,所以我不会有空值错误。以及在调用API之后的API时如何填充vars,因为视图已经显示?谢谢
-
我在这里看到的问题是你使用
await和http.get返回一个observable。您将需要检查 rxjs,或者如何subscribe这些可观察对象,因为即使您等待它们,它们仍然没有解决。他们以不同的方式工作。我敢打赌console.log(JSON.parse(response.data));这一行会给你某种错误。 -
@VladimirBogomolov 我认为你是对的。它应该是:
const response = await this.http.get(url, params, headers).toPromise();或this.http.get(url, params, headers).subscribe((response) => this.page = response.data); -
我可以直接订阅 http 响应作为您的第二个建议吗?
标签: angular typescript ionic-framework