我有打字稿项目和更具体的Angular应用程序。
我有一个名为Test的类(你可以假设它是一个角度的组件)并且它可以访问http服务,这通常像this.http(' / endpoint')一样使用.subbebe(response = > {});
我需要在两者之间添加一些逻辑并将其分解为单独的方法(代码比我的示例稍微复杂一点)。
export class Test {
init() {
this.http.get('/endpoint').map(this.transform);
}
transform(data) {
// more logic here in isolated scope
this.accessOutside(data); // I cannot access this method, isolated scope.
// How to break down some logic into separate methods to access them
// or how to create it new method within method?
return data
}
accessOutside(data) {
// more logic
}
}
当我调用this.http.get(' / endpoint')。map(this.transform)my" transform"方法是隔离的,无法访问Test类中的其他方法,但如何访问它或如何在transform方法中创建方法?
答案 0 :(得分:1)
将transform
函数传递到map
函数时,就像这样
this.http.get('/endpoint').map(this.transform);
您正在传递transform
函数的副本,该函数没有this
的概念。因此,当map
函数调用transform
函数的副本时,它的上下文将默认为window
对象。因此,在transform
方法的副本中,它将在accessOutside
对象上查找名为window
的函数。
解决此问题的最简单方法是使用lambda函数,如下所示:
this.http.get('/endpoint').map(data => this.transform(data));
由于arrow funcitons可以访问其定义的上下文范围,当map
调用箭头函数时,this
将引用您的Test
实例和不是window