2013-09-21 57 views
4

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

.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

可能重复(http://stackoverflow.com/questions/12225475/angularjs-how-to-add-缓存到资源对象) – pilau

+0

伟大而简洁的答案在这里:http://stackoverflow.com/a/16080092/1049693 – pilau

回答

8

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

可以缓存一样,$ http请求:如果你想检索缓存特定的URL做

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

[angularjs?:如何添加缓存资源对象]的