Angular2:在ngOnInit中调用后端api后未填充全局变量



我试图填充一个对象arraycomponent中全局声明,以在同一component内的另一个函数中使用,但它没有得到填充。

浏览器网络选项卡显示responsehttp调用的数据,但是当我尝试访问数组时,它显示undefined.

这是我正在尝试的:

myArray: MyObject[];
requestPath: string;
one: string;
two: string;
three: string;
four: string;
ngOnInit() {
this.activatedRoute.queryParams.subscribe((params: Params) => {
this.one = params['one'];
this.two = params['two'];
this.three = params['three'];
this.four = params['four'];
this.requestPath = this.getRequestPath(this.one,this.two,this.three,this.four);
this.http.get(this.requestPath)  //returns a json data
.map(res => res.json())
.subscribe(
data => { this.myArray = data;
},
err => console.error(err),
() => console.log('inside comparator oninit'));
});
this.add(this.myArray);
}

当我尝试在函数add访问它时:

add(event){
alert("data is: "+event);
}

我在警报中得到data is undefined,这意味着变量没有填充获取的数据。

正确的方法是什么?代码有什么问题?

您需要在订阅中拨打

.subscribe(
data => { this.myArray = data;
this.add(this.myArray);
}

由于您正在调用异步调用,因此您必须在异步调用完成时调用您的方法。所以你需要像这样在订阅调用中调用你的函数。

试试这个——

.subscribe(
data => { 
this.myArray = data;
this.add(this.myArray);
},

最新更新