有很多使用 AngularIO 中的 Observable.subscribe()
函数的例子。无论如何,我只能看到内部的匿名函数,如下所示:
bar().subscribe(data => this.data = data, ...);
如果我尝试像这里一样提交同一个类的函数:
updateData(myData : DataType[]) {
this.data = data;
}
...
bar().subscribe(this.updateData, ...);
然后第 2 行中的 this
对象不再引用当前对象。这可能是一些我不理解的 JavaScript 逻辑。我知道你可以将一个对象绑定(bind)到一个函数,这是我必须做的吗?这是最佳做法吗?人们通常如何解决这个问题(我想避免在 subscribe()
中有一个大的匿名函数。
最佳答案
您可以将其包装在 arrow function 中这将捕获正确的 this
:
bar().subscribe((myData) => this.updateData(myData), ...);
或者使用Function.bind
这也将绑定(bind)正确的上下文:
bar().subscribe(this.updateData.bind(this), ...);
但请注意 Function.bind
返回 any
,这将使您失去 TypeScript 中的类型检查。参见 https://github.com/Microsoft/TypeScript/issues/212
关于javascript - 如何将它绑定(bind)到 AngularIO 的 Observable::subscribe 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44584849/