AngularJS $资源和缓存工厂

Yas*_*vit 4 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" } }
    });
}]);
Run Code Online (Sandbox Code Playgroud)

我在控制器中使用它如下: -

.controller('Controller', ['CandidateService', function ($scope, CandidateService) {
  $scope.candidateList = [];

  CandidateService.getAll(function (data) {
    $scope.candidateList = data;   
  });
}]);
Run Code Online (Sandbox Code Playgroud)

这工作绝对正常.现在我需要将来自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;
        }
    }

}]);
Run Code Online (Sandbox Code Playgroud)

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

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

Tho*_*ons 8

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

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

var $httpDefaultCache = $cacheFactory.get('$http');
Run Code Online (Sandbox Code Playgroud)

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

var cachedData = $httpDefaultCache.get('http://myserver.com/foo/bar/123');
Run Code Online (Sandbox Code Playgroud)

$您也可以清除缓存:

$httpDefaultCache.remove('http://myserver.com/foo/bar/123');
Run Code Online (Sandbox Code Playgroud)

要么 :

$httpDefaultCache.removeAll();
Run Code Online (Sandbox Code Playgroud)

完整帖子在这里:通过缓存启动$ http