在AngularJs中,如何从缓存中添加/删除$resource项
In AngularJs, how to add/remove $resource items to/from the cache
我有一个$资源,我用来获取一个或所有注册,创建新的或更新现有的注册,删除注册…的作品。下面是资源的代码:
.factory('Registrations', function ($resource) {
return $resource('api/registrations/:assetType/:registrationId',
{assetType: '@assetType', registrationId: '@assetRegistrationId'},
{query: {
method: 'GET',
cache: true,
isArray: true
}}
);
})
正如您所看到的,缓存已经到位,并且工作得很好:后续请求不会传播到服务器。除了……在创建或删除注册后,缓存不会更新。
对于移除,我已经提出了这个解决方案。看起来很糟糕,但很有效。这里有一些奇怪的事情需要注意:
Registrations.delete({assetType: $scope.assetType, registrationId: registration.assetRegistrationId}, function () {
//doesn't seem to work -> dirty hack
//$cacheFactory.get('$http').remove('api/registrations/' + $scope.assetType + '/' + registration.registrationId);
var cached = $cacheFactory.get('$http').get('api/registrations/' + $scope.assetType);
var cachedRegistrations = JSON.parse(cached[1]);
var registrationInCache = get(cachedRegistrations, registration.assetRegistrationId);
if (registrationInCache) {
cachedRegistrations.splice(cachedRegistrations.indexOf(registrationInCache), 1);
cached[1] = JSON.stringify(cachedRegistrations);
}
$scope.registrations = Registrations.query({assetType: $scope.assetType});
//...
令人惊讶的是,缓存没有保存javascript对象的列表,而只有一个条目,其中包含一个实际字符串,表示所有条目的json。然后我要做的是对该字符串进行字符串化,删除已删除的项并再次对列表进行字符串化。
对于创建,我没有那么有创意,我只能删除缓存中的一个条目(代表完整的集合),并从服务器重新加载所有数据。下面是我如何使缓存失效的方法:
$cacheFactory.get('$http').remove('api/registrations/' + $scope.assetType);
我可能错过了一些明显的东西。有人有什么建议或澄清吗?谢谢!
我认为这种缓存应该在服务器端完成,而不是在前端(AngularJS)。我不是100%确定Angular的cache=true
是如何工作的,但我相信它只是缓存了结果,所以其他请求将获得缓存的结果。Angular无法判断服务器上的数据何时发生了变化。
相关文章:
- 使用php或javascript从facebook相册URL中删除多余的部分
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 删除对HTML元素的拖动
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 按顺序添加和删除类
- iframe正在添加标签,需要删除它们
- 如何在HTML输入字段中添加不可删除的后缀
- addData()从最新图表中删除.js 2.1.3-怎么了
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 删除CKEditor工具栏按钮,但不删除功能
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 正在删除node.js中已验证的网站
- 正在从页面中删除iframe
- 如何从 HTML 查询中删除项目
- 如何在iOS应用程序中从Firebase中删除超过6小时的数据
- 更新,删除不适用于角度$resource + [php]
- 使用AngularJS$Resource从MySQL中添加和删除数据
- 在AngularJs中,如何从缓存中添加/删除$resource项