Обратный звонок в неправильной области
У меня есть проблема, и я не могу вспомнить, как ее обойти. Я подписываюсь на обратный вызов из сторонней директивы, но мне не перезванивают с правильной областью действия. И под этим я подразумеваю, что когда он попадает в мой контроллер 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 ответ
Вы можете использовать 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").