2016-12-01 8 views
0

Как вызвать обратный вызов, когда Device возвращает данные и передает this методу обратного вызова.Обратный вызов, когда объект возвращает данные

Контроллер

(function() { 
    'use strict'; 

    angular 
     .module('frontendApp') 
     .controller('DeviceController', DeviceController); 

    DeviceController.$inject = ['$scope', '$state', 'Device']; 

    function DeviceController ($scope, $state, Device) { 
     var vm = this; 

     vm.devices = []; 

     loadAll(); 

     function updateMap(flag){ 
     var self = this;//how to pass "this" from loadAll()? 
     // logic to update map 
     } 

     function loadAll() { 
      Device.query(function(result) { 
       vm.devices = result; 
       // Callback function here - updateMap(true) 
      }); 
     } 
    } 
})(); 

Сервис

function Device ($resource, DateUtils) { 
    var resourceUrl = 'api/devices/:id'; 

    return $resource(resourceUrl, {}, { 
     'query': { method: 'GET', isArray: true}, 
     'update': { method:'PUT' } 
    }); 
} 
+1

Можете ли вы объяснить, что вы ожидаете от 'этого', обратитесь к диспетчеру, vm или службе? – Aruna

+0

'this' для связи контроллер. Я пытаюсь вызвать другие методы, определенные в контроллере, из 'updateMap'. – lazyboy

+1

Вы можете использовать 'vm' непосредственно внутри' updateMap'. Я не вижу никаких проблем. Можете ли вы попробовать? – Aruna

ответ

1

Как уже обсуждалось, вы можете использовать vm непосредственно внутри updateMap функции, как показано ниже.

(function() { 
    'use strict'; 

    angular 
     .module('frontendApp') 
     .controller('DeviceController', DeviceController); 

    DeviceController.$inject = ['$scope', '$state', 'Device']; 

    function DeviceController ($scope, $state, Device) { 
     var vm = this; 

     vm.devices = []; 

     loadAll(); 

     function updateMap(flag){ 
     console.log(vm.devices); 
     } 

     function loadAll() { 
      Device.query(function(result) { 
       vm.devices = result; 
       // Callback function here - updateMap(true) 
      }); 
     } 
    } 
})();