4

我已经使用自定义函数和参数实现了 angular $resource,如下所示:-

.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 中,以便在我在控制器之间移动时不会加载它。

所以我想我会做如下事情: -

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

}]);

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

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

4

1 回答 1

8

您可以使用 $cacheFactory 对象。请参阅:http : //docs.angularjs.org/api/ng .$cacheFactory

您可以像这样缓存 $http 请求:

var $httpDefaultCache = $cacheFactory.get('$http');

如果要检索缓存中的特定 url,请执行以下操作:

var cachedData = $httpDefaultCache.get('http://myserver.com/foo/bar/123');

$你也可以清除缓存:

$httpDefaultCache.remove('http://myserver.com/foo/bar/123');

或者 :

$httpDefaultCache.removeAll();

在此处完成帖子:使用缓存启动 $http

于 2013-09-22T17:39:06.943 回答