考虑以下场景,我将使用对RxJs Observable的订阅向子组件传递属性。
当不发送匿名函数或隐藏此上下文时,Angular未检测到更改。
// Scenario 1
// Child component IS updated properly
this.someService.someObservable.subscribe((data) => {
this.doSomething(data);
})
// Scenario 2
// Child component IS updated properly
this.someService.someObservable.subscribe(this.doSomething.bind(this))
// Scenario 3
// Child component is NOT updated properly
this.someService.someObservable.subscribe(this.doSomething)
private doSomething(data) {
// this is executed on all the scenarios
this.fieldPassedToChildComponent = data;
}
为什么我们需要绑定angular的上下文来获取更改?
答案 0 :(得分:2)
第三种情况的问题:
// Scenario 3
// Child component is NOT updated properly
this.someService.someObservable.subscribe(this.doSomething)
您无法确定此行this
函数中doSomething
个关键字包含的内容:this.fieldPassedToChildComponent = data;
。这取决于subscribe
方法如何调用您的回调。
如果您查看subscribe
的源代码,您可以找到如何调用回调方法,以及this
设置的内容。我的猜测是undefined
。但可能是任何事情。所以不要这样使用。