详解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 Object与Function使用
Jan 11 Javascript
jquery 全局AJAX事件使用代码
Nov 05 Javascript
Js表格万条数据瞬间加载实现代码
Feb 20 Javascript
js验证IP及子网掩码的合法性有效性示例
Apr 30 Javascript
微信小程序 教程之注册页面
Oct 17 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
在iFrame子页面里实现模态框的方法
Aug 17 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
浅入深出Vue之自动化路由
Aug 06 Javascript
js实现纯前端压缩图片
Nov 16 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
JavaScript 实现页面滚动动画
Apr 24 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
11个PHP 分页脚本推荐
2011/08/15 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
PHP 图片处理
2020/09/16 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
Python中map和列表推导效率比较实例分析
2015/06/17 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
关于VPN
2012/06/10 面试题
最新自我评价范文
2013/11/16 职场文书
专科文秘应届生求职信
2013/11/18 职场文书
个人委托书格式
2014/04/04 职场文书
应届毕业生自荐信
2014/05/28 职场文书
应聘教师求职信
2014/07/19 职场文书
消防验收申请报告
2015/05/15 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫