详解AngularJS中$http缓存以及处理多个$http请求的方法


Posted in Javascript onFebruary 06, 2016

$http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。在AngularJS的实际项目中,经常需要处理多个$http请求,每个$http请求返回一个promise,我们可以把多个promise放到$q.all()方法接受的一个数组实参中去。

1.处理多个$http请求

angular.module('app',[])
.controller('AppCtrl', function AppCtrl(myService){
var app = this;
myService.getAll().then(function(info){
app.myInfo = info;
})
})
.service('myService', function MyService($http, $q){
var myService = this;
user = 'https://api...',
repos = '',
events = '';
myService.getData = function getData(){
return $http.get(user).then(function(userData){
return {
name:userData.data.name,
url:userData.data.url,
repoCount: userData.data.count
}
})
};
myService.getUserRepos = function getUserRepos(){
return $http.get(repos).then(function(response){
return _.map(response.data, function(item){
return {
name: item.name,
description:item.description,
starts: item.startCount
}
})
})
}
myService.getUserEvents = function getUserEvents(){
...
}
myService.getAll = function(){
var userPromise = myService.getData(),
userEventsPromise = myService.getUserRepos(),
userReposPromise = myService.getUserRepos();
return $q.all([userPromise, userEventsPromise, userReposPromise]).then(function(){
....
})
}
})

2.$http请求缓存

$http的get方法第二个形参接受一个对象,该对象的cache字段可以接受一个bool类型实现缓存,即{cache:true},也可以接受一个服务。

通过factory方式创建一个服务,并把该服务注入到controller中去。

angular.module('app',[])
.factory("myCache", function($cacheFactory){
return $cacheFactory("me");
})
.controller("AppCtrl", function($http, myCache){
var app = this;
app.load = function(){
$http.get("apiurl",{cache:myCache})
.success(function(data){
app.data = data;
})
}
app.clearCache = function(){
myCache.remove("apiurl");
}
})

小编总结:

● 实际上,实现缓存机制的是$cacheFactory
● 通过{cache:myCache}把缓存机制放在当前请求中
● $cacheFactory把请求api作为key,所以清楚缓存的时候,也是根据这个key来清除缓存

以上所述是小编给大家分享的AngularJS中$http缓存以及处理多个$http请求的方法,希望对大家有所帮助。

Javascript 相关文章推荐
javascript 打开页面window.location和window.open的区别
Mar 17 Javascript
各浏览器对click方法的支持差异小结
Jul 31 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
Oct 24 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
Jquery节点遍历next与nextAll方法使用示例
Jul 22 Javascript
理解JavaScript的变量的入门教程
Jul 07 Javascript
Jquery实现弹性滑块滑动选择数值插件
Aug 08 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
极易被忽视的javascript面试题七问七答
Feb 15 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
jquery操作select取值赋值与设置选中实例
Feb 28 Javascript
vue.js路由跳转详解
Aug 28 Javascript
JavaScript中数组添加值和访问值常见问题
Feb 06 #Javascript
详解Angularjs filter过滤器
Feb 06 #Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 #Javascript
浅析Javascript匿名函数与自执行函数
Feb 06 #Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 #Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
Feb 05 #Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 #Javascript
You might like
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
详解YII关联查询
2016/01/10 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
js 数据类型转换总结笔记
2011/01/17 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python显示进度条的方法
2014/09/20 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
PyQT实现多窗口切换
2018/04/20 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
《乞巧》教学反思
2014/02/27 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
python 字典和列表嵌套用法详解
2021/06/29 Python