如何更新角度服务中的缓存资源?

时间:2014-09-11 03:17:07

标签: angularjs caching angularjs-service angularjs-resource

从已缓存的ngResource服务更新角度数据有什么好的模式?

我一直在搜索像这样的帖子[1]:How to refresh / invalidate $resource cache in AngularJS,但是对于这个特定(但相当普遍)的情景,我会很高兴听到角度专家的正确方法。

我在这里寻找一般模式。无论是理解还是实施角度 - 我都是新手。

我有一个非常标准的ngResource服务,它有一个非常标准的query方法和一个自定义的放置方法update

myServices.factory('ThingsService', [
'$resource',
function ($resource) {
    return $resource('/api/things/:id', { id: '@id' }, {
        query: { method: 'GET', isArray: true, cache: true },
        update: {method: 'PUT', cache: true },
    });
}]);

我在这样的控制器中使用它:

    $scope.things = ThingsService.query(function (x) {
        // must assign these only once data is loaded
        $scope.allCount = x.Things.length;
        $scope.incomingCount = $filter('filter')(x.Things, { State: 'incoming' }).length;
    });

到目前为止一切顺利。数据返回正常,并在仪表板视图中很好地呈现。 我们支持就地编辑,用户可以在仪表板列表中编辑数据。 首先使用thing获取angular.copy(...)的卷影副本,以便我们可以支持缓冲用户的更改。 (就像对话框为用户做的那样)。然后当他们确认他们的更改时,我们使用卷影副本调用:

        ThingsService.update({ id: currentThing.Id }, { Data: currentThing.Data }, function () {
            //TODO: now, if this PUT succeeds, 
            //I want to update the value of $scope.things array to reflect the changes, 
            //without going to back to the server for the whole array.
        });

这正确地将更改发送到服务器,该服务器返回更新的thing,但是绑定到query方法的仪表板视图不会自动更新。有点希望有角度,ThingsService及其缓存会以某种方式为我处理,你知道通过更新缓存数据。由于服务应该知道我刚刚更新了服务提供的其中一个项目。

为了避免一直回到服务器,我们告诉ThingsService缓存其结果,这是一个好的开始。但是你应该如何更新缓存数据中已更改的thing

使用ngResource服务进行此类更新是否有标准模式?

最好不要直接搞乱缓存。我甚至不在乎它是缓存还是如何缓存。我只想让$scope.things反映发布的更改更改。

0 个答案:

没有答案