javascript - 如何将它绑定(bind)到 AngularIO 的 Observable::subscribe 函数?

标签 javascript angular typescript this subscribe

有很多使用 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/

相关文章:

javascript - 将链式方法附加到 JavaScript 中的元素集合

javascript - 使用 Controller 方法选择 Angular 选项卡

javascript - 如何将按钮与输入结合起来?

angular - 如何在我的其他组件中排除 app.component.html 的代码

javascript - 从基类访问和执行子类中的函数

php - memcache php 缓存 js css 和图像

javascript - Angular 为 2 的输入去抖动

css - 如何在 cdk-virtual-scroll-viewport 填充其余高度时始终保持工具栏位于顶部?

javascript - 如何在firebase.auth(js,ts)中更新用户电话号码

javascript - 如何从 JSON 数组中获取数据并在表中显示数据?