2017-08-04 28 views
1

我遇到問題,不記得如何解決此問題。我正在訂閱來自第三方指令的回調,但未被正確範圍回調。我的意思是,當它命中我的控制器this實際上是一些其他範圍我不能完全弄清楚,所以它不能訪問任何成員變量。我如何回到我的控制器範圍?錯誤範圍內的回撥

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

組件控制器:

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

如果我改變呼叫回

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

然後我的回調執行的權利範圍(即我的控制器),但參數layer丟失;/

備註

我用的打字稿,角1.6和角分量

回答

1

你可以使用bind回調綁定到你想要的(控制器),或者簡單的回調,並通過訪問之前將其存儲在另一個新變量的上下文回調中的那個變量。

喜歡的東西:

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 

...或:

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

的準確語法可能會因您的報價代碼的居住地變化(例如尋找到「本」是你想要什麼,或者使用任何上下文而不是「this」)。

+0

謝謝威爾,任何想法如何在打字稿中工作?我認爲默認情況下typescript會做'var that = this' – Chris

+0

由於TypeScript是JavaScript的超集,任何一種方法都應該可以工作。同樣,根據你的代碼的其他部分,在我的例子中原來的'this'可能不是正確的上下文。使用(綁定或存儲)您的情況所需的任何上下文。我還會用更多的解釋來更新綁定示例。 – Will

+0

感謝會,但它仍然沒有工作,生病更新我的什麼香港專業教育學院試圖 – Chris