次のシナリオを考えてみましょう。ここでは子コンポーネントを、RxJs Observableへのサブスクリプションを使用して後で更新されるプロパティに渡しています。RxJSまたはAngular Observable subscribeメソッドにコンテキストが必要なのはなぜですか?
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;
}
変更を反映するために、角度のためのコンテキストをバインドする必要があるのはなぜですか?
doSomething内の 'this'は、グローバルオブジェクトに対して評価されます。 –
シナリオ2は動作しますが、3は動作しません。それは意味があります。なぜなら、「これ」がどのように機能するからですか。 'this'は、あなたがそれを束縛しない限り、関数が呼び出されるときに決まります。 – elclanrs
@elclanrsあなたは正しいです、それを編集しました –