Zugriff auf Variablen, die eine Komponente aus einem RxJS subscribe () - Funktion
Ich bin in der Lage zu verwenden this.variable
um auf Variablen zuzugreifen, die in jedem Teil der Komponente, außer in den RxJS Funktionen wie subscribe()
oder catch()
.
Im Beispiel unten, ich will so drucken Sie eine Nachricht nach dem ausführen eines Prozesses:
import {Component, View} from 'angular2/core';
@Component({
selector: 'navigator'
})
@View({
template: './app.component.html',
styles: ['./app.component.css']
})
export class AppComponent {
message: string;
constructor() {
this.message = 'success';
}
doSomething() {
runTheProcess()
.subscribe(function(location) {
console.log(this.message);
});
}
}
Wenn ich doSomething()
bekomme ich undefined. Dieses Szenario kann gelöst werden, verwenden Sie eine lokale variable:
import {Component, View} from 'angular2/core';
@Component({
selector: 'navigator'
})
@View({
template: './app.component.html',
styles: ['./app.component.css']
})
export class AppComponent {
message: string;
constructor() {
this.message = 'success';
}
doSomething() {
//assign it to a local variable
let message = this.message;
runTheProcess()
.subscribe(function(location) {
console.log(message);
});
}
}
Ich nehme an, dies ist im Zusammenhang mit der this
jedoch, warum kann ich nicht auf die this.message
innerhalb der subscribe()
?
- Pfeil-Funktionen basarat.gitbooks.io/Typoskript/content/docs/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies hat nichts zu tun mit rx oder eckig, und alles, was mit Javascript und Typescript.
Ich nehme an, Sie sind vertraut mit der Semantik von
this
im Rahmen der Funktionsaufrufe in Javascript (wenn nicht, gibt es kein Mangel an Erklärungen online) - die Semantik gelten in Erster snippet, natürlich, und das ist der einzige Grundthis.message
undefined innensubscribe()
es. Das ist nur Javascript.Da reden wir über Typescript:
Pfeil-Funktionen sind ein Typoskript, konstruieren soll (zum Teil) zu umgehen die Unbeholfenheit dieser Semantik durch lexikalisch erfassen der Bedeutung von
this
, was bedeutet, dassthis
im inneren ein Pfeil-Funktion ===this
aus dem äußeren Kontext.Also, wenn Sie ersetzen:
durch:
Erhalten Sie das erwartete Ergebnis.
Als alternative zu @drewmoore Antwort, wenn Sie möchten, haben die externen Funktionen, die Sie tun können:
Durch externalising die
errorHandler
- Funktion, es kann verwendet werden, an mehreren Orten (dh. Abonnements). Indem er so (Fett) Pfeil-Funktionen, die Ihr code wird die Aufnahme der "this" - Kontext (wie besprochen @Drewmoore Antwort).Was fehlt, ist die Fähigkeit zu schreiben, die folgenden und haben Sie behandelt wie ein Pfeil-Funktion. Folgende arbeiten und übergibt das argument implizit. Leider ist, soweit ich weiß, können Sie nicht erfassen, die
this
Umfeld (vielleicht verwendenbind
um dies zu erreichen, aber das macht den code Ausführlicher insgesamt).Das ist soooo lapidar! Aber leider funktioniert nicht, wenn der Kontext erforderlich ist.