Angular2:在ngOnInit

时间:2018-05-10 05:39:00

标签: angular typescript

我试图在array内填充全局声明的对象component,以便在同一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,这意味着变量没有填充所提取的数据。

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

2 个答案:

答案 0 :(得分:1)

你需要在订阅中进行调用,

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

答案 1 :(得分:0)

当您调用异步调用时,您必须在异步调用完成时调用方法。所以你需要像这样在subscribe调用中调用你的函数。

试试这个 -

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