如何将它绑定到AngularIO的Observable :: subscribe的函数?

use*_*865 4 javascript this subscribe typescript angular

使用Observable.subscribe()AngularIO 的功能有很多例子.无论如何,我只能在里面看到匿名函数:

bar().subscribe(data => this.data = data, ...);
Run Code Online (Sandbox Code Playgroud)

如果我尝试像这里一样提交同一个类的函数:

updateData(myData : DataType[]) {
   this.data = data;
}
...
bar().subscribe(this.updateData, ...);
Run Code Online (Sandbox Code Playgroud)

然后第this2行中的对象不再引用当前对象.这可能是我不理解的一些JavaScript逻辑.我知道你可以将一个对象绑定到一个函数,这是我要做的吗?这是最佳做法吗?一个人通常如何解决这个问题(我想避免在其中有一个大的匿名函数subscribe().

Sar*_*ana 8

您可以将其包含在箭头函数中,该函数将捕获正确的this:

bar().subscribe((myData) => this.updateData(myData), ...);
Run Code Online (Sandbox Code Playgroud)

或使用Function.bind哪个也将绑定正确的上下文:

bar().subscribe(this.updateData.bind(this), ...);
Run Code Online (Sandbox Code Playgroud)

但请注意,Function.bind返回any会使您在TypeScript中丢失类型检查.请参阅https://github.com/Microsoft/TypeScript/issues/212