我有一个角度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)
}
答案 0 :(得分:2)
问题在于this.parseResponse
时return 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 => {
...
}