2015-06-17 4 views
0

Я использую следующий код. Содержимое dataService - это все возможные $ http в моем приложении. В контроллере я использую эту функцию. Функция вызывает службу Web Api, она вызывается и возвращает правильный ответ. В функции customerToggleSuccess данные undefined. Я не понимаю, почему.

(function() { 
    angular.module('myApp') 
     .factory('dataService', ['$q', '$http']); 

    function dataService($q, $http,) { 

     return { 
      customerToggleActive: customerToggleActive 
     }; 

     function customerToggleActive(customerId, index) { 

      var customer = { 
       "id": customerId, 
       "index": index 
      }; 

      return $http({ 
       method: 'POST', 
       url: 'api/customer/validtoggle/', 
       headers: { 
       }, 
       transformResponse: function (data, headers) { 
       }, 
       data: customer 
      }) 
      .then(customerToggleData) 
      .catch(customerToggleError) 
     } 

     function customerToggleData(response) { 
      return response.data; 
     } 

     function customerToggleError(response) { 
     } 
    } 

}()); 

(function() { 

    angular.module('myApp') 
     .controller('customerController', ['$scope', 'dataService', '$http', '$log', CustomerController]); 

    function CustomerController($scope, dataService, $http, , $log) { 
     var vm = this; 

     vm.activeToggle = function (customerId, index) { 

      dataService.customerToggleActive(customerId, index) 
       .then(customerToggleSuccess) 
       .catch(customerToggleCatch) 
       .finally(customerToggleComplete); 

      function customerToggleSuccess(data) { 
       $log.info(data); 
      } 

      function customerToggleCatch(errorMsg) { 
      } 

      function customerToggleComplete() { 
      } 

     } 

    } 

}()); 
+0

В $ http вы настраиваете функцию transformRequest, но ничего не возвращаете. Может, в этом и проблема? [link] (https://docs.angularjs.org/api/ng/service/$http) – McDit

ответ

0

Просто вернуть $ HTTP обещание,

return $http({ 
      method: 'POST', 
      url: 'api/customer/validtoggle/', 
      headers: { 
      }, 
      transformResponse: function (data, headers) { 
      }, 
      data: customer 
     }) 

вы можете получить доступ к этому,

dataService.customerToggleActive(customerId, index) 
     .then(function (response) { 
      // do your stuff 
     }) 

или, вы можете сделать,

function dataService($q, $http,) { 
    var defer = $q.defer(); 
    .... 
    .... 
    $http({ 
     method: 'POST', 
     url: 'api/customer/validtoggle/', 
     headers: { 
     }, 
     transformResponse: function (data, headers) { 
     }, 
     data: customer 
    }) 
    function customerToggleData(response) { 
     defer.resolve (response.data); 
    } 

    function customerToggleError(response) { 
     defer.reject(response); 
    } 
    return defer.promise; 
} 
+0

Во втором случае никаких изменений, в первом случае, как лечить обещание? –

+0

вы можете использовать обещание так же, как и раньше. –

+0

Я отредактировал свой ответ, посмотрим, поможет ли он вам –

0

Подобно этому,

(function() { 
     angular.module('myApp') 
      .factory('dataService', ['$q', '$http']); 

     function dataService($q, $http,) { 

      return { 
       customerToggleActive: customerToggleActive 
      }; 

      function customerToggleActive(customerId, index) { 

       var customer = { 
        "id": customerId, 
        "index": index 
       }; 

       return $http({ 
        method: 'POST', 
        url: 'api/customer/validtoggle/', 
        headers: { 
        }, 
        transformResponse: function (data, headers) { 
        }, 
        data: customer 
       }) 

      }  
     } 

    }()); 
Смежные вопросы