【问题标题】:Remove cache after service call服务调用后删除缓存
【发布时间】:2015-12-15 21:29:59
【问题描述】:

所以我有两种方法服务。我正在使用 $resource 的内置缓存支持。我想要实现的是当我从控制器进行一些服务调用以刷新缓存时。我正在尝试使用 $cacheResource 的一些示例,但没有成功。下面是我的代码

服务

angular.module('module').factory('Service1',['$resource',
   function ($resource){
     return $resource('..api/latest/myservice', {}, {

       takeSomething: {
         method: 'GET',
         url: '..api/latest/myservice/takesomething',
        cache: true
       },

       putSomething: {
         method: 'GET',
         url: '..api/latest/myservice/putsomething',
         cache: true
       }

      }
}]

控制器

angular.module('module').factory('MyController',['$scope','Service1',
     function($scope, service1) {
       ....

     $scope.update = function() {
       service1.putSomething({
       ......
       refresh cache for takeSomething method in service or for all methods
     });
     }

}

因此,当我从控制器调用此函数更新时,我想为 takeSomething 方法或所有方法刷新缓存。

【问题讨论】:

  • cache: false ?您希望缓存值是动态的吗?而且您希望每个 api 调用都不同?
  • 好吧,我想缓存:是的,因为我将它用于来自控制器的其他调用。但只有通过控制器的这个调用,我才想刷新缓存。
  • service scope 的全局变量中存储true/false 的值并在service 中使用另一种方法来更新该全局变量?听起来不错?
  • hm...那么最好的方法是什么?
  • 我在从 Apache2 服务器获取一些 Json 时遇到了类似的问题,而且我总是在获取新的 json 时遇到问题。我解决了它,将 currentTime 附加到 $http GET 请求。

标签: javascript angularjs caching


【解决方案1】:

可以通过$cacheFactory获取默认的$http缓存;这将有一个 remove 方法来做你想做的事。

您需要将$cacheFactory 注入您计划使用它的任何位置,在您的$scope.update 中,或者您可以将其移至您的服务中。

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

$httpDefaultCache.remove('..api/latest/myservice/takesomething');

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2020-04-12
    • 2021-07-14
    • 2015-10-15
    相关资源
    最近更新 更多