2016-08-26 9 views
0

У меня есть этот сервис, чтобы получить список автомобилей из WebAPI сервера:AngularJS: получить список объектов от службы в контроллере

angular.module('MyServices') 
    .service('carService', ['$http', '$rootScope', 
     function ($http, $rootScope) { 

     this.getList =function(userName, ticket) 
     { 
      $rootScope.$emit('My.OnBusy'); 

      $http.get('api/car' 
       , { params: {userName: userName} } 
      ).success(function (data) { 
       $rootScope.$emit('My.OnIdle'); 

       if (data[0] && data[0].Name == "Error") 
       { 
        $rootScope.$emit("My.OnError", data[0].Model); 
        return {}; 
       } 

       return data; 
      }).error(function (data, status, headers, config) { 
       $rootScope.$emit('My.OnIdle'); 
       $rootScope.$emit("My.OnError", "Error in communication with server."); 
       return {}; 
      }); 
     } 
    }] 
    ); 

И в контроллере я использую это так:

angular.module('MyControllers') 
.controller('carController', function CarController($rootScope, $scope, $http, carService) { 

    $scope.loadCars = function (userName, ticket) { 
     $scope.Cars = carService.getList(userName, ticket); 
    } 

    $scope.loadCars($rootScope.user.email, ''); 
}); 

Но $ scope.Cars неопределен после кал на GetList. Я попытался использовать «тогда», когда я вызываю службу, но она не увенчалась успехом.

Говоря, что я хочу обрабатывать успех и ошибку операции в самой службе, как я могу получить конечный результат в контроллере?

ответ

0

Для дальнейшего использования:

служба должна выглядеть так:

angular.module('MyServices') 
    .service('carService', ['$http', '$rootScope', '$q' 
     function ($http, $rootScope, $q) { 

     this.getList =function(userName, ticket) 
     { 
      $rootScope.$emit('My.OnBusy'); 

      var deferred = $q.defer(); 


      $http.get('api/car' 
       , { params: {userName: userName} } 
      ).success(function (data) { 
       $rootScope.$emit('My.OnIdle'); 

       if (data[0] && data[0].Name == "Error") 
       { 
        $rootScope.$emit("My.OnError", data[0].Model); 
        deferred.reject(data[0].Address); 
        //return {}; 
       } 

       deferred.resolve(data); 
       //return data; 
      }).error(function (data, status, headers, config) { 
       $rootScope.$emit('My.OnIdle'); 
       $rootScope.$emit("My.OnError", "Error in communication with server."); 
       deferred.reject("Error in communication with server.");     
       //return {}; 
      }); 

      return deferred.promise; 

     } 
    }] 
    ); 

А теперь "затем" работы в контроллере:

angular.module('MyControllers') 
.controller('carController', function CarController($rootScope, $scope, $http, carService) { 

    $scope.loadCars = function (userName, ticket) { 
     carService.getList(userName, ticket).then(function (data) { 
      $scope.Cars = data; 
     });; 
    } 

    $scope.loadCars($rootScope.user.email, ''); 
});