angularjs - 发布请求后使 $resource 缓存无效

标签 angularjs angularjs-resource

我正在使用 $resource 并缓存 get 请求的结果。我的问题是,在发布请求后,缓存没有失效。

这是服务的返回值:

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

这是我在 Controller 中使用的保存方法。如您所见,我正在使用 post 请求上的回调来重新计算查询/名词列表。
var newNoun = new Noun($scope.noun);
newNoun.$save(function(x) {
  $scope.nouns = Noun.query();
});

我想在调用 post 或其他非 get 方法后使缓存无效。我怎么能这样做?这是否已经内置在 $resource 中,还是我需要自己实现?

最佳答案

虽然上面@runTarm 的回答很棒,但它不允许从继承服务轻松自定义操作,例如以下是不可能的:

app.factory('Steps', function (CachedResource) {
    return CachedResource('/steps/:stepId', {}, {
        save: { method: 'POST', params: { stepId: '@stepId' } }
    });
});

在这种情况下,save 的定义将被 CachedResource 中的那个替换.

解决方案

但它可以通过替换从 Angular 1.4 轻松修复
actions = angular.extend({}, actions, {


actions = angular.merge({}, actions, {

以便两个对象深度合并。

更好的解决方案

在上述场景中,在 CachedResource 中定义的操作选项将优先于继承服务中的自定义配置。要解决此问题,请将传递给 merge 的参数顺序切换到:
actions = angular.merge({}, { /* default options get, query, etc. */ }, actions);

使用此解决方案,以下将按预期工作(即在调用 DESTROY 时使用 DELETE 而不是默认 remove ):
app.factory('Steps', function (CachedResource) {
    return CachedResource('/steps/:stepId', {}, {
        remove: { method: 'DESTROY' }
    });
}); 

关于angularjs - 发布请求后使 $resource 缓存无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117388/

相关文章:

javascript - AngularJS uib-typeahead 似乎中断了页面其余部分的插值

angularjs - 带有模板的 Angular 1.x 指令

javascript - $routeParam 不通过 $resource 工厂的 url 传递变量

javascript - 具有两个参数的 Angular $resource 端点

javascript - Angular $resource : Unknown Provider error, 加载依赖和 Angular 元素

javascript - 无法使用 Angular 指令将参数传递给函数

javascript - Angularjs Binding 2指令范围模型到父 Controller 模型

javascript - 通过绑定(bind) 'ng-src' 获取元素不起作用,Protractor

java - 使用嵌套数组迭代 AngularJS 资源