angularjs – 发送请求后$资源缓存无效

我正在使用$资源并缓存获取请求的结果.我的问题是,在发布请求后,缓存不会被无效.

以下是服务的返回值:

return $resource('http://url.com/api/url/:id',{},{
'query' : {
      method : 'GET',isArray:true,cache : true
    },'get' : {
  method : 'GET',cache : false
}  
})

这是我在控制器内使用的保存方法.正如你所看到的,我在post请求中使用回调来重新计算名词的查询/列表.

var newNoun = new Noun($scope.noun);
newNoun.$save(function(x) {
  $scope.nouns = Noun.query();
});

我想在调用post或者另一个get-get方法后使缓存无效.我该怎么做?这是否已经内置到$资源中,还是需要自己实现?

您可以创建一个包装服务来执行您想要的缓存,例如:
app.factory('cachedResource',function ($resource,$cacheFactory) {
  var cache = $cacheFactory('resourceCache');

  var interceptor = {
    response: function (response) {
      cache.remove(response.config.url);
      console.log('cache removed',response.config.url);
      return response;
    }
  };

  return function (url,paramDefaults,actions,options) {
    actions = angular.extend({},{
      'get':    { method: 'GET',cache: cache },'query':  { method: 'GET',cache: cache,isArray: true },'save':   { method: 'POST',interceptor: interceptor },'remove': { method: 'DELETE','delete': { method: 'DELETE',});

    return $resource(url,options);
  };
});

然后用cachedResource替换任何$资源.

示例代码http://plnkr.co/edit/lIQw4uogcoMpcuHTWy2U?p=preview

相关文章

AngularJS 是一个JavaScript 框架。它可通过 注:建议把脚本放在 元素的底部。这会提高网页加载速度,因...
angluarjs中页面初始化的时候会出现语法{{}}在页面中问题,也即是页面闪烁问题。出现这个的原因是:由于...
AngularJS 通过被称为指令的新属性来扩展 HTML。AngularJS 指令AngularJS 指令是扩展的 HTML 属性,带有...
AngularJS 使用表达式把数据绑定到 HTML。AngularJS 表达式AngularJS 表达式写在双大括号内:{{ expres...
ng-repeat 指令可以完美的显示表格。在表格中显示数据 {{ x.Name }} {{ x.Country }} 使用 CSS 样式为了...
$http是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。读取 JSON 文件下是存储在web服务器上...