使用ngResouce的持久数据

时间:2016-06-01 11:51:03

标签: javascript angularjs

我有这样的工厂:

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 个答案:

答案 0 :(得分:1)

根据docs,您可以使用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 }
  });

修改 要更好地控制缓存,请传递使用$cacheFactory服务构建的cache对象:

// 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 }
});