2017-08-04 71 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