Предполагая, что мой сервис возвращает обещание от $ resource get, мне интересно, подходит ли это для кэширования данных. В этом примере, после нажатия на стрелку назад и возврата к результатам поиска, я не хочу снова запрашивать веб-сервер, так как у меня их уже есть. Является ли это правильной моделью для решения этой ситуации? Пример ниже - запрос Flixter (Rotten Tomatoes) Api.
Boilded вниз код:
Контроллер:
function SearchCtrl($scope, $route, $routeParams, $location, DataService) {
DataService.search($routeParams.q).then(function(data){
$scope.movies = data.movies;
});
}
Услуги:
angular.module('myApp.services', []).
factory('DataService', ['$q', '$rootScope', 'JsonService', function ($q, $rootScope, JsonService) {
var movie = {};
var searchResults = {};
var searchq = '';
var service = {
search: function(q) {
var d = $q.defer();
// checking search query, if is the same as the last one,
//resolve the results since we already have them and don't call service
// IS THIS THE CORRECT PATTERN
if (q==searchq) {
d.resolve(searchResults);
} else {
// returns a $resource with defined getdata
JsonService.search.movieSearch(q, 20, 1).getdata(function(data){
searchResults = data;
searchq = q;
d.resolve(searchResults);
});
}
return d.promise;
},
getSearchResults: function() {
return searchResults;
}
};
return service;
}]);
Я не могу представить рабочий пример, как это подвергнет мой ключ API.
Спасибо, красивое решение. Использование localStorage или даже что-то вроде taffyDB может быть интересным решением. Я подожду, чтобы узнать, получу ли я больше ответов, а затем награду. – lucuma