2014-09-04 50 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); 

    }]);