2017-08-04 3 views
1

Ich habe ein Problem und kann mich nicht erinnern, wie ich es umgehen kann. Ich abonniere einen Rückruf von einer Drittanbieter-Richtlinie, werde aber nicht mit dem richtigen Umfang zurückgerufen. Und damit meine ich, dass, wenn es meinen Controller trifft this ist eigentlich ein anderer Bereich, den ich nicht ganz herausfinden kann, so dass es nicht auf alle Mitgliedsvariablen zugreifen kann. Wie komme ich zurück zu meinem Controller-Bereich?Rückruf auf falschen Bereich

<ui-gmap-layer type="HeatmapLayer" onCreated="$ctrl.heatLayerCallback"></ui-gmap-layer> 

Component Controller:

heatLayerCallback(heatLayer: google.maps.visualization.HeatmapLayer) { 
    this.heatMapLayer = heatLayer; 
    // 'this' here is not my controller 
} 

Wenn ich den Anruf zurück zu

<ui-gmap-layer onCreated="$ctrl.heatLayerCallback(layer)"></ui-gmap-layer> 

Dann ist mein Rückruf auf dem richtigen Umfang führt zu ändern (dh mein Controller), aber der Parameter layer verloren ;

Anmerkungen

Ich bin mit Typoskript, Angular 1.6 und Winkelkomponenten

Antwort

1

Sie bind verwenden könnte den Rückruf an den Kontext Sie wollen (der Controller) oder einfach speichern sie in einem anderen neuen Variablen vor dem Rückruf und den Zugriff darauf zu binden, indem diese Variable innerhalb des Callbacks.

Etwas wie:

var heatLayerCallback = (function(heatLayer: google.maps.visualization.HeatmapLayer) { 
    this.heatMapLayer = heatLayer; 
    // 'this' here is now the same as the 'this' outside/below 
}).bind(this); // bind to this or whatever context you want 

... oder:

var that = this; // store this or whatever context you want 
... 
heatLayerCallback(heatLayer: google.maps.visualization.HeatmapLayer) { 
    that.heatMapLayer = heatLayer; 

Die genaue Syntax Sie zitierte Code lebte je nachdem, wo (zB finden können variieren, wo "die" ist, was Sie wollen, oder verwende irgendeinen Kontext anstelle von "dies").

+0

Danke Will, irgendeine Idee, wie man das in Typoskript bearbeitet? Ich denke standardmäßig typescript wird 'var that = this 'tun. – Chris

+0

Da TypeScript eine Obermenge von JavaScript ist, sollte jeder Ansatz funktionieren. Abhängig davon, wie der Rest Ihres Codes aussieht, ist das Original "this" in meinen Beispielen möglicherweise nicht der richtige Kontext. Verwenden (binden oder speichern) den Kontext, den Sie für Ihre Situation benötigen. Ich werde auch das Bind-Beispiel mit ein wenig mehr Erklärung aktualisieren. – Will

+0

Dank Will, aber es funktioniert immer noch nicht, Update meine Frage mit, was ive versuchte – Chris