Постоянные данные с использованием ngResouce

0

У меня есть такая фабрика:

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?

Теги:

1 ответ

1

В соответствии с документами вы можете использовать опцию 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 }
});
  • 0
    Интересно. Как бы установить время кеширования для этого звонка?
  • 0
    @Coop, нет такой возможности сделать это для вас. Вам придется самостоятельно управлять сроком действия кэша, используя $cacheFactory . Смотрите обновленный ответ для деталей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню