angular - Ionic-Angular 从 API --undefined 和 console.log 顺序获取数据
问题描述
各位,我有一个问题我已经一个星期没解决了。我正在开发一个 Ionic-Angular 项目,我想从我的 API 获取数据。我在构造函数中执行 http 函数,但输出是在一切正常之后。当我在任何函数中使用 http 结果变量时,它给出了未定义的结果。不知何故,我不明白我可以使用 {{result}} 在 page.html 中显示。我尝试了异步 - 等待 - 承诺,但我没有成功。我想我没有得到这个概念。
export class Tab1Page {
apiRoot:string = "http://dengepvc.com/api.php";
results;
constructor(public http:HttpClient) {
console.log("constructor");
this.http.get(this.apiRoot).subscribe(data => {
this.results = data["lat"];
console.log(this.results);
});
}
ngOnInit(){
console.log("ngOnInit");
}
ngAfterContentInit(){
console.log("ngAfterContentInit");
// if i put here: console.log(this.results); it gives undefined.
}
}
这是我的控制台输出顺序;
constructor
ngOnInit
ngAfterContentInit
41.097792
我该怎么办 - 编写代码等。你能帮我吗?我已经尝试了一个星期。
解决方案
嗨,问题是您正在执行 AJAX 请求(这需要一些时间).. 它会在您的 Ionic 应用程序已经挂接到 AfterContentInitEvent .. 即使您在构造函数中执行此操作时用数据响应您。 .所以你可以做的是:
1 - 订阅您需要的响应:
export class Tab1Page {
apiRoot:string = "http://dengepvc.com/api.php";
results;
ajaxCall;
constructor(public http:HttpClient) {
console.log("constructor");
this.ajaxCall = this.http.get(this.apiRoot);
this.ajaxCall.subscribe(data => {
this.results = data["lat"];
console.log(this.results);
});
}
ngOnInit(){
console.log("ngOnInit");
}
ngAfterContentInit(){
console.log("ngAfterContentInit");
// subscribe again here for response if you really can't put all your logic only in one subscribe
this.ajaxCall.subscribe(data => {
this.results = data["lat"];
console.log(this.results);
});
}
}
希望这对你有帮助!
推荐阅读
- c# - 当 wpf 中的 IsEnabled 更改时更改按钮属性
- php - 将 Json 数组传递到不同的 html div
- c - 链接器无法将块放入空闲内存范围
- sql-server - 发布时 KingswaySoft SSIS 错误 - 需要密码
- python-3.x - 获取 2 个单独的 tkinter 窗口,而不是浏览 3 个页面
- c# - 如何在行项目之间添加空格
- cefsharp - How to prevent Winform popup box CefSharp.BrowserSubprocess.exe Breakpoint A has been reached?
- axon - 是否可以使用 axon 3.3.3 将所有事件存储在微服务架构中的中央 RDBMS 数据库中?
- python - LSTM with rule-based features?
- c++ - 在 Visual Studio Code 中使用 C++ 进行调试时如何读取输入?