AngularJS $ resource&缓存工厂

时间:2013-09-21 09:06:40

标签: javascript angularjs angularjs-factory

我已经使用自定义函数和参数实现了角度$资源,如下所示: -

.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;
        }
    }

}]);

但我不能让这个工作。我认为它与角度工厂是一个单身人士有关。

我的方法是否正确实现缓存?

1 个答案:

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