2014-09-04 2 views
-2

Я сделал $ http запрос API, который возвращает простой объект json.

Теперь мне нужно сохранить эти данные в некотором роде, чтобы вызов $ http был предварительно сформирован только один раз по всем шаблонам шаблона и будет вставляться в '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

[Кэширование] (https://docs.angularjs.org/api/ng/service/$http#caching)? – Blackhole

+0

Кэширование - единственное решение для этого? Могу ли я использовать константу для хранения объектов в Угловом? –

+0

Вы можете. Но кеш уже делает это для вас, почему вы хотите изобрести колесо? – Blackhole

ответ

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 
    }; 
}) 
Смежные вопросы