gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:23:24 26 4
gpt4 key购买 nike

我正在使用 $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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com