我有这样的工厂:
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
吗?
答案 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 }
});