2014-09-04 82 views
-2

我做了一個$ http請求API返回簡單的json對象。

現在我需要以某種方式存儲這些數據,因此$ http調用將只在所有模板url上執行一次,並將粘貼到'MainController'。 什麼是最好的解決方案?

angular.module('myApp' ,['ngRoute']) 

.factory('MasterData' , function($http){ 
    var responseData; 
    $http.get('https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA') 
    .then(function(response){ 
     responseData = response.data; 
      return responseData; 
    }) 

}) 

.controller('MainController' , function($scope , MasterData){ 

}) 
+0

[Caching](https://docs.angularjs.org/api/ng/service/$http#caching)? – Blackhole 2014-09-04 14:39:14

+0

緩存是唯一的解決方案嗎? 我不能使用常量在Angular中存儲對象嗎? – 2014-09-04 14:45:16

+0

你可以。但緩存已經爲你做了,你爲什麼要重新發明輪子? – Blackhole 2014-09-04 14:50:26

回答

1

您可以使用服務並緩存$ http-request的結果。服務是單身人士,因此只能打一次電話。

.service('MasterService', function ($http, $q) { 
    var data; 
    function getData() { 
    var deferred = $q.defer() 
    if (data) { 
     deferred.resolve(data); 
    } else { 
     $http.get('someUrl') 
     .then(function(response){ 
      data = response.data; 
      deferred.resolve(data); 
     }); 
    } 

    return deferred.promise; 
    } 

    return { 
    getData : getData 
    }; 
})