У меня есть такая фабрика:
angular
.module('app')
.factory('RepositoriesService', RepositoriesService);
function RepositoriesService($resource) {
var persistentData = null;
var data = $resource('http://xxxxxxx.co.uk/:id', { id: '@id' }, {
update: { method: 'PUT' },
query: { isArray: false }
});
return data;
}
В моем контроллере я могу получить такие данные:
RepositoriesService.query();
Теперь я хочу постоянные данные на заводе. Поэтому при первом запросе возвращаемые данные должны сохраняться в переменной persistentData
. Последующие query
запросов к заводу должны возвращать значение persistentData
а не создавать новый запрос API для данных. Я знаю, как сделать это легко с помощью $http
но возможно ли это с помощью ngResource
?
В соответствии с документами вы можете использовать опцию cache
:
cache - {boolean | Cache} - Если true, кеш-адрес по умолчанию $ http будет использоваться для кэширования запроса GET, иначе если экземпляр кеша, построенный с помощью $ cacheFactory, этот кеш будет использоваться для кэширования.
Чтобы кэшировать query
запроса в вашем случае:
var data = $resource('http://xxxxxxx.co.uk/:id', { id: '@id' }, {
update: { method: 'PUT' },
query: { isArray: false, cache: true }
});
EDIT: чтобы лучше контролировать кеш, передайте свой собственный объект cache
построенный с помощью службы $ cacheFactory:
// now you can use this object in your service
// to control the cache behaviour, like clean it after a while
var myCache = $cacheFactory('RepositoryService');
var data = $resource('http://xxxxxxx.co.uk/:id', { id: '@id' }, {
update: { method: 'PUT' },
query: { isArray: false, cache: myCache }
});
$cacheFactory
. Смотрите обновленный ответ для деталей.