2014-09-04 49 views
0

我使用它将数据保存到服务并在保存后再次在同一控制器中调用它。但它对这项服务没有任何价值。当我在另一个控制器中再次调用服务时,它给了我想要的结果。离子框架:被称为服务

.controller('HomeCtrl', function ($scope) { 
    $http.get(URL).success(function(data){ 
     Service.thisData(data); 

     Service.getData(); // value = 1000 
    }); 

    // call save data from service 
    // i didn't get any data from the service 
    Service.getData(); // value = undefined 
}; 

让我怎么得到服务的数据,除了http.get里面?

谢谢。

+0

可能重复[如何返回从Ajax调用的响应?](http://stackoverflow.com/questions/14220321/how-to -return最响应从-AN-Ajax的呼叫) – raina77ow 2014-09-04 04:43:32

回答

0

我建议你在工厂编写api调用,然后在需要数据的控制器中调用该服务。您也可以在多个控制器中调用相同的服务。

根据我的理解,我希望这是您的要求。如果没有,请让我知道,我会尽我所能。

您可以参考plunkr代码 http://plnkr.co/edit/G9MkVMSQ4VjMw8g2svkT?p=preview

angular.module('mainModule', []) 

.factory('apiCallService', ['$http', '$q', '$log', 
    function ($http, $q, $log) { 
     var instance = {}; 
     var config = null; 

     instance.apiCallToServer = function (config) { 
      var deferred = $q.defer(); 

      $http(config) 
       .success(function (data, status, header, config) { 
        deferred.resolve(data); 
       }) 
       .error(function (data, status, header, config) { 
        deferred.reject(status); 
       }); 

      return deferred.promise; 

     }; 

     return instance; 

    }]) 

    .controller('FirstCtrl', ["$scope", "$log", "$location", "apiCallService", 
    function ($scope, $log, $location, apiCallService) { 

     var config = { 
       method: "get", 
       url: "/path" 
      }; 

      $scope.successCallback = function (data) { 
       $log.log("success."); 
       $scope.data = data; 
       //data will be stored in '$scope.data'. 
      }; 

      $scope.failureCallback = function (status) { 
       $log.log("Error"); 
      }; 

      apiCallService 
       .apiCallToServer(config) 
       .then($scope.successCallback, $scope.failureCallback); 

    }]);