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