回调错误的范围

时间:2017-08-04 14:02:59

标签: angularjs typescript angular-google-maps

我有一个问题,不记得如何解决它。我正在订阅来自第三方指令的回调,但没有使用正确的范围回调。而且我的意思是,当它命中我的控制器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丢失; /

备注

我正在使用Typescript,Angular 1.6和Angular Components

1 个答案:

答案 0 :(得分:2)

您可以使用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”所在的位置,或使用任何上下文而不是“this”)。