Angularjs注入拦截器实现Loading效果


Posted in Javascript onDecember 28, 2015

angularjs作为一个全ajax的框架,对于请求,如果页面上不做任何操作的话,在结果烦回来之前,页面是没有任何响应的,不像普通的HTTP请求,会有进度条之类。

什么是拦截器?

$httpProvider 中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到了该数组中的常规服务工厂。下面的例子告诉你怎么创建一个拦截器:

<!-- lang: js -->
module.factory('myInterceptor', ['$log', function($log) {
 $log.debug('$log is here to show you that this is a regular factory with injection');
 var myInterceptor = {
  ....
  ....
  ....
 };
 return myInterceptor;
}]);

然后通过它的名字添加到 $httpProvider.interceptors 数组:

<!-- lang: js -->
module.config(['$httpProvider', function($httpProvider) {
 $httpProvider.interceptors.push('myInterceptor');
}]);

先给大家展示下效果图:

Angularjs注入拦截器实现Loading效果

本文通过对httpProvider注入拦截器实现loading。

html代码

<div class="loading-modal modal" ng-if="loading">
 <div class="loading">
  <img src="<?=$this->module->getAssetsUrl()?>/img/loading.gif" alt=""/><span ng-bind="loading_text"></span>
 </div>
</div>

css代码

.modal {
 position: fixed;
 width: 100%;
 height: 100%;
 left: 0;
 top: 0;
 z-index: 99;
 background: rgba(0, 0, 0, 0.3);
 overflow: hidden;
}
.loading {
 position: absolute;
 top: 50%;
 background: white;
 #solution> .border-radius(8px);
 width: 160px;
 height: 72px;
 left: 50%;
 margin-top: -36px;
 margin-left: -80px;
 text-align: center;
 img {
 margin-top: 12px;
 text-align: center;
 }
 span {
 display: block;
 }
}

js代码

app.config(["$routeProvider", "$httpProvider", function ($routeProvider, $httpProvider) {
 $routeProvider.when('/', {
  templateUrl: "/views/reminder/index.html",
  controller: "IndexController"
 });
 $routeProvider.when('/create', {
  templateUrl: "/views/reminder/item/create.html",
  controller: "ItemCreateController"
 });
 $routeProvider.otherwise({redirectTo: '/'});
 $httpProvider.interceptors.push('timestampMarker');
}]);
//loading
app.factory('timestampMarker', ["$rootScope", function ($rootScope) {
 var timestampMarker = {
  request: function (config) {
   $rootScope.loading = true;
   config.requestTimestamp = new Date().getTime();
   return config;
  },
  response: function (response) {
   // $rootScope.loading = false;
   response.config.responseTimestamp = new Date().getTime();
   return response;
  }
 };
 return timestampMarker;
}]);

拦截器允许你:

通过实现 request 方法拦截请求: 该方法会在 $http 发送请求道后台之前执行,因此你可以修改配置或做其他的操作。该方法接收请求配置对象(request configuration object)作为参数,然后必须返回配置对象或者 promise 。如果返回无效的配置对象或者 promise 则会被拒绝,导致 $http 调用失败。

通过实现 response 方法拦截响应: 该方法会在 $http 接收到从后台过来的响应之后执行,因此你可以修改响应或做其他操作。该方法接收响应对象(response object)作为参数,然后必须返回响应对象或者 promise。响应对象包括了请求配置(request configuration),头(headers),状态(status)和从后台过来的数据(data)。如果返回无效的响应对象或者 promise 会被拒绝,导致 $http 调用失败。

通过实现 requestError 方法拦截请求异常: 有时候一个请求发送失败或者被拦截器拒绝了。请求异常拦截器会俘获那些被上一个请求拦截器中断的请求。它可以用来恢复请求或者有时可以用来撤销请求之前所做的配置,比如说关闭进度条,激活按钮和输入框什么之类的。

通过实现 responseError 方法拦截响应异常: 有时候我们后台调用失败了。也有可能它被一个请求拦截器拒绝了,或者被上一个响应拦截器中断了。在这种情况下,响应异常拦截器可以帮助我们恢复后台调用。

Javascript 相关文章推荐
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
多引号嵌套的变量命名的问题
May 09 Javascript
jQuery插件jPaginate实现无刷新分页
May 04 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
JS实现消息来时让网页标题闪动效果的方法
Apr 20 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
Dec 14 Javascript
JS实现的简易拖放效果示例
Dec 29 Javascript
学好js,这些js函数概念一定要知道【推荐】
Jan 19 Javascript
JavaScript中Promise的使用详解
Feb 26 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
Aug 14 Javascript
webpack结合express实现自动刷新的方法
May 07 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 Javascript
AngularJS进行性能调优的7个建议
Dec 28 #Javascript
浅析AngularJS Filter用法
Dec 28 #Javascript
jquery实现倒计时功能
Dec 28 #Javascript
基于jquery实现瀑布流布局
Jun 28 #Javascript
详解AngularJS Filter(过滤器)用法
Dec 28 #Javascript
原生JavaScript实现瀑布流布局
Jun 28 #Javascript
js实现瀑布流的三种方式比较
Jun 28 #Javascript
You might like
文件上传的实现
2006/10/09 PHP
php xml 入门学习资料
2011/01/01 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
php数组遍历类与用法示例
2019/05/24 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
js实现简单模态框实例
2018/11/16 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python 图片去噪的方法示例
2019/07/09 Python
pytorch进行上采样的种类实例
2020/02/18 Python
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
联强国际笔试题面试题
2013/07/10 面试题
自荐信模版
2013/10/24 职场文书
生日寿宴答谢词
2014/01/19 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
2014年党务公开方案
2014/05/08 职场文书
2015年计划生育责任书
2015/05/08 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
用python画城市轮播地图
2021/05/28 Python