angular - Angular 的 ngOnInit 中未填充数据
问题描述
我正在调用一个虚拟 Web API 来填充一个类变量以进一步使用它,但后来我遇到了一个奇怪的场景,这让我感到困惑:
export class myClass implements OnInit{
data : any;
constructor (private http:HttpClient){}
ngOnInit(){
this.http.get("http://dummy.restapiexample.com/api/v1/employee/82342").subscribe(e=>this.data = e);
alert("beforeConsole");
console.log(this.data);
var size = Object.keys(this.data).length;
alert(size);
}
}
变量数据仅在我使用时填充alert
(仅用于检查)。如果我删除 alert("beforeConsole");
然后控制台给我undefined
。
我无法理解这一点。请提出实际情况。
解决方案
Http.get 返回一个 Observable 并且是异步的。您的 console.log 在请求有时间处理之前运行。
将您的 console.log 移到您的订阅中,因为一旦发出 observable,它将运行。
this.http.get("http://dummy.restapiexample.com/api/v1/employee/82342")
.subscribe(e => {
this.data = e;
console.log(this.data);
var size = Object.keys(this.data).length;
});
推荐阅读
- bootstrap-4 - 如何通过日历单击仅激活一个 bootstrap 4 日期选择器?
- python - 正则表达式模式在英语 POS 标记语料库中查找后缀、结束引号和单词的所有匹配项
- javascript - 宽度与高度
- html - 如何将图标和p标签对齐在同一行(materializecss)
- python - 如何通过延迟初始化共享全局变量?
- jquery - 使用 Highcharts 从包含单个降雨数据的系列中创建响应式累积降雨图
- r - 是否有一个 R 函数可以根据其他两个变量给我一个值的总和?
- java - 提取水并重新填充水箱
- c++ - 为什么 NVCC 不喜欢 std::arrays 的默认初始化?
- google-apps-script - 我在哪里可以删除以前对共享 Google 表格的权限