Betrachten Sie die folgenden Szenarien, in denen ich ein untergeordnetes Element übergebe eine Eigenschaft, die später mithilfe eines Abonnements für ein RxJs Observable aktualisiert wird.Warum benötigt RxJS oder Angular Observable Subscribe-Methode Kontext?
Angular erkennt keine Änderungen, wenn keine anonyme Funktion gesendet wird oder der Kontext nicht angezeigt wird.
// 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;
}
Warum müssen wir den Kontext binden, für Winkel die Änderungen in Kraft treten?
Wenn nicht, wird das 'this' in' doSomething' zum globalen Objekt ausgewertet. –
Sie meinen Szenario 2 funktioniert, aber 3 nicht? Das macht Sinn, weil "das" funktioniert. 'this' wird entschieden, wenn die Funktion aufgerufen wird, es sei denn, Sie binden sie. – elclanrs
@elclanrs Sie haben Recht, bearbeitet es –