修改AngularJS中的$http cache中的数据
来源:互联网 发布:vb format函数怎么用 编辑:程序博客网 时间:2024/05/18 00:28
最近做的AngularJS项目其中有两个要求
1. 从服务器取以Array形式存在的数据,然后存在cache中。
这个好办,$resource可以通过$http设置cache。
2. 服务器通过socket.io发送新数据,这些数据要加到cache里或从cache里删除。
这个就比较麻烦了,搞了一下午才搞通。
首先是从cache里获取相应的数据。
获取$http的默认cache:
var $httpDefaultCache = $cacheFactory.get('$http');
然后通过键(url或者地址)来取值,这里使用本地json文件模拟的服务器数据,所以是文件路径。
var cachedJobs = $httpDefaultCache.get('data/jobs.json');
cachedJobs是一个数组,一共4个元素,其中0、2、3分别为200,HTTP Head和OK这些Http相关的信息。我所需要的数据是数组的第二个元素,所以
var dataarray = JSON.parse(cachedJobs[1]);这里面cachedJobs[1]是一个字母组成的数组,需要用JSON.parse转换成JSON Object/JSON Array。
到这里就取到存在cache中的数据了,下面开始研究怎么往里面添加元素。
用字符串造一个JSON object比较麻烦,索性就从dataarray里面取一个座位要添加的元素。这里面取的是index为4的元素。
var jsonobj = JSON.parse(cachedJobs[1])[4];
If you need to add an element created by yourself, notice that string needs to be converted with JSON.parse():
var jsonobj = JSON.parse("{\"id\": 554814,\"name\": \"vidhyachrometest\", \"facility_id\": 2,\"location\": [], \"staff\": [],\"log\": []}");
插入元素:
dataarray.push(jsonobj);
可以通过alert(dataarray.length)检查数据是否插入成功。
然后就到了最关键的地方:怎么把dataarray放到cache里面去。
我一共试了两种方法,第一种是直接把dataarray赋给cachedJobs[1],另一种是新建一个[],然后把dataarray和cachedJobs中的0、2、3项逐一添加进去,然后向$httpDefaultCache中put。
但是这两种方法都跑不通。
我试了很多改进的方法,最后发现如果在$httpDefaultCache中put时,把dataarray换成cachedJobs[i],就没问题了。仔细对比了一下两者,发现dataarray是经过JSON.parse()的cachedJobs[i],所以把dataarray换成JSON.stringify(dataarray),两种方法就都没问题了。
方法一:
cachedJobs[1] = JSON.stringify(dataarray)
var newjson = [];for(var i = 0; i < cachedJobs.length; i++){if(i != 1){newjson.push(cachedJobs[i]);}else{newjson.push(JSON.stringify(dataarray));}}$httpDefaultCache.put('data/jobs.json', newjson);
完整代码(含alert验证):
var $httpDefaultCache = $cacheFactory.get('$http');var cachedJobs = $httpDefaultCache.get('data/jobs.json');var dataarray = JSON.parse(cachedJobs[1]);var jsonobj = JSON.parse(cachedJobs[1])[4];//alert(JSON.stringify(jsonobj));//alert(dataarray.length);dataarray.push(jsonobj);// alert(dataarray.length);// alert("before: " + JSON.parse($httpDefaultCache.get('data/jobs.json')[1]).length);//Method 1cachedJobs[1] = JSON.stringify(dataarray);//Method 2var newjson = [];for(var i = 0; i < cachedJobs.length; i++){if(i != 1){newjson.push(cachedJobs[i]);}else{newjson.push(JSON.stringify(dataarray));}}alert(JSON.stringify(newjson));$httpDefaultCache.put('data/jobs.json', newjson);//alert("after: " + JSON.parse($httpDefaultCache.get('data/jobs.json')[1]).length);
在stackoverflow上还发了个贴,后来自己解决了。
http://stackoverflow.com/questions/25048688/is-there-any-way-to-update-the-data-in-the-http-cache-in-angularjs
- 修改AngularJS中的$http cache中的数据
- AngularJS中的$http服务请求数据
- AngularJS中的$http
- AngularJS中的 $http服务
- AngularJS中的$http
- angularjs中的$http详解
- angularJs中的http服务
- AngularJS 中的数据绑定
- HTTP header中的 Cache-control
- HTTP header中的 Cache-control
- HTTP header中的Cache-Control
- HTTP header中的 Cache-control
- HTTP header中的Cache-control
- AngularJS中的$http深入分析
- Angularjs中的$Http与$resource
- AngularJS中的交互 $http
- 解决HTTP数据不更新问题——no-cache在HTTP通信协议中的应用
- 解决HTTP数据不更新问题——no-cache在HTTP通信协议中的应用收藏
- Fatal error: Call-time pass-by-reference has been removed in E:\xx\db\mysqli.php on line 267
- 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)
- ios ARC 机制中的strong和weak 属性关键字的原理和使用规则
- 后缀自动机
- 黑马程序员_动态代理
- 修改AngularJS中的$http cache中的数据
- poj3308 Paratroopers --- 最小点权覆盖->最小割
- hadoop学习之第二个程序求平均成绩。
- cocos2d-x 事件分发机制 ——触摸事件监听
- cocos2d-x 事件分发机制 ——加速计事件监听
- 黑马程序员_多线程
- XML的SelectNodes使用方法以及XPath
- 20 Copy Clone
- hdu1627