修改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

0 0
原创粉丝点击