有很多使用AngularIO中的Observable.subscribe()
函数的例子。然而,我只能看到其中的匿名函数:
bar().subscribe(data => this.data = data, ...);
如果我尝试像这样提交同一类别的函数:
updateData(myData : DataType[]) {
this.data = data;
}
...
bar().subscribe(this.updateData, ...);
那么第2行中的this
对象不再引用当前对象。这可能是我不理解的一些JavaScript逻辑。我知道您可以将对象绑定到函数中,这是我需要做的吗?这是最佳实践吗?通常如何解决此问题(我想避免在subscribe()
内使用大型匿名函数)。
Function.call
将混乱的细节隐藏在一个辅助函数中:private subscribeBar(onDataChanged: (myData: any) => void): void { bar().subscribe((myData) => onDataChanged.call(this, myData)); }
你可以像这样调用它:this.subscribeBar(this.updateData);
如果你还需要传递额外的参数或保存订阅以便在以后取消订阅,以及在单元测试中进行适当的断言,这将特别有用。 - EriF89