Angular 2服务:为什么私有成员未定义?

时间:2017-02-27 10:09:50

标签: angular angular2-services

试图找出原因如果我设置了服务的私有成员,当我回到该服务时,我会发现该成员是未定义的。

getResult (): Observable<result[]> {
    return this.http.get(this.url)
      .map(this.extractData)
      .catch(this.handleError);
  }


  private extractData(res: Response) {
    let body = res.json();

    // save the data in the service
    this.data = body;

    return body || { };
  }

从服务中的另一个函数,当我尝试读取此数据时,它是未定义的。为什么呢?

    getData() {

         this.data // undefeind !!!!
}

从组件调用getData onInit服务:

 this.myService.getResult()
      .subscribe(res => {this.data= res;
        },
        error => {
          console.log("error on getData function: " + error);
        }
      );

2 个答案:

答案 0 :(得分:3)

如果您想在传递的方法中访问this,则需要绑定this

.map(this.extractData.bind(this))

bind(this)恕我直言这个用例比() => {}更方便,因为无论需要传递多少个参数,它都有效。使用箭头功能,所有参数都需要重复两次。

答案 1 :(得分:1)

@ Gunther的解决方案有效。 另一种解决方法是包装箭头函数。

getResult (): Observable<result[]> {
    return this.http.get(this.url)
      .map((res)=>this.extractData(res))
      .catch((err)=>this.handleError(err));
  }