_this.parse不是函数 - >范围问题?

时间:2017-06-16 12:47:30

标签: typescript

我有一个角度4组件,它有以下方法。

private parseResponse (response: Response) : Dimension[] {
    let responseBody : any[] = response.json();
    console.log(responseBody); // I see an array of objects here
    return responseBody.map( (x) => this.parseDimension(x)); // (********) 
}

private parseDimension (dimension) : Dimension {
    console.log("called"); // <- I never see this in the console
    let retVal = new Dimension(
        dimension["DimensionCode"],
        dimension["DimensionLabel"],
        dimension["DimensionDescription"]
    )
    return retVal }

我读到胖箭头lambda表达式应该保留上下文。 我得到了这个

  

TypeError:_this.parseDimension不是函数       在http://localhost:4200/main.bundle.js:222:61       在Array.map(本机)       在

该行指的是(********)

我还尝试了一个简单的lambda,就像前一个(在同一个组件中)一样有效

getDimensions() : Observable<Dimension[]> { 
    return this.http.get(this.endpoint)
        .map(this.parseResponse)
}

2 个答案:

答案 0 :(得分:2)

问题在于this.parseResponsereturn this.http.get(this.endpoint) .map(this.parseResponse)未绑定到当前上下文。

您可以将它包装在arrow function内,然后再将其作为回调传递给map

getDimensions(): Observable {
    return this.http.get(this.endpoint).map((params) => this.parseResponse(params));
}

答案 1 :(得分:0)

在这些情况下,从方法更改为属性(函数属性)将有助于

// instead of 
private parseDimension (dimension) : Dimension {
  ...
}
// this way the scope will be kept as expected
private parseDimension = (dimension) : Dimension => {
  ...
}

另外,请检查here the difference in generated code