我已经使用自定义函数和参数实现了角度$资源,如下所示: -
.factory('CandidateService', ['$resource', function ($resource) {
return $resource("api/:action/:id", {},
{
'getCandidates': { method: "GET", params: { action: "Candidate" }, isArray: true },
'getCandidate': { method: 'GET', params: { action: "Candidate", id: "@id" } }
});
}]);
我在控制器中使用它如下: -
.controller('Controller', ['CandidateService', function ($scope, CandidateService) {
$scope.candidateList = [];
CandidateService.getAll(function (data) {
$scope.candidateList = data;
});
}]);
这绝对没问题。现在我需要将来自api的数据缓存到CandidateService Factory中,这样就不会在控制器之间移动eveytime。
所以我想我会做如下的事情: -
.factory('CandidateService', ['$resource', function ($resource) {
var Api = $resource("api/:action/:id", {},
{
'getCandidates': { method: "GET", params: { action: "Candidate" }, isArray: true },
'getCandidate': { method: 'GET', params: { action: "Candidate", id: "@id" } }
});
var candidateDataLoaded = false;
var candidateData = [];
return {
getCandidates: function () {
if (!candidateDataLoaded) {
Api.getAll(function (data) {
angular.copy(data, candidateData);
});
}
return candidateData;
}
}
}]);
但我不能让这个工作。我认为它与角度工厂是一个单身人士有关。
我的方法是否正确实现缓存?
答案 0 :(得分:8)
您可以使用$ cacheFactory对象。 请参阅:http://docs.angularjs.org/api/ng。$ cacheFactory
您可以像这样缓存$ http请求:
var $httpDefaultCache = $cacheFactory.get('$http');
如果要在缓存中检索特定网址,请执行以下操作:
var cachedData = $httpDefaultCache.get('http://myserver.com/foo/bar/123');
$您也可以清除缓存:
$httpDefaultCache.remove('http://myserver.com/foo/bar/123');
或:
$httpDefaultCache.removeAll();
在此完成帖子:Power up $http with caching