Angular中的interceptors拦截器


Posted in Javascript onJune 25, 2017

废话不多说了,直接给大家贴代码了,具体代码如下所述;

<!DOCTYPE html>
<html ng-app="nickApp">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
  <title>interceptors</title>
  <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
  <script>
    /*
     $http service在Angular中用于简化与后台的交互过程,其本质上使用XMLHttpRequest或JSONP进行与后台的数据交互。
     在与后台的交互过程中,可能会对每条请求发送到Server之前进行预处理(如加入token),或者是在Server返回数据到达客户端还未被处理之前进行预处理(如将非JSON格式数据进行转换);
     当然还有可能对在请求和响应过程过发生的问题进行捕获处理。所以Angular为我们提供了$http拦截器,用来实现上述需求。*/
    /*
     $httpProvider中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到该数组中的常规服务工厂。
     1 首先 创建一个拦截器服务工厂
     */
    angular.module('nickApp', [])
        .factory('NickInterceptor', ['$q', function ($q) {
          return {
            // 可选,拦截成功的请求
            /*
             该方法会在$http发送请求到后台之前执行,因此你可以修改配置或做其他的操作。
             该方法接收请求配置对象(request configuration object)作为参数,然后必须返回配置对象或者promise 。
             如果返回无效的配置对象或者 promise 则会被拒绝,导致$http 调用失败
             */
            request: function (config) {
              // 进行预处理
              // 例如加令牌
              config.headers['Authorization'] = 'token666';
              /*
               Request Headers
               token:token666 //加的令牌
               */
              return config || $q.when(config);
            },
            // 可选,拦截成功的响应
            /*
             该方法会在$http接收到从后台过来的响应之后执行,因此你可以修改响应或做其他操作。
             该方法接收响应对象(response object)作为参数,
             然后必须返回响应对象或者promise。响应对象包括了请求配置(request configuration),头(headers),状态(status)和从后台过来的数据(data)。
             如果返回无效的响应对象或者 promise 会被拒绝,导致$http调用失败。
             */
            response: function (response) {
              // 进行预处理
              // 例如 JSON.parse(response)等
              return response || $q.when(reponse);
            },
            // 可选,拦截失败的请求
            /*
             有时一个请求发送失败或者被拦截器拒绝了。requestError拦截器会捕获那些被上一个请求拦截器中断的请求。
             它可以用来恢复请求或者有时可以用来撤销请求之前所做的配置,比如关闭遮罩层,显示进度条,激活按钮和输入框之类的。
             */
            requestError: function (rejection) {
              // 对失败的请求进行处理
              // 例如 统一的弹窗提示
              return $q.reject(rejection);
            },
            // 可选,拦截失败的响应
            /*
             有时候我们后台调用失败了。也有可能它被一个请求拦截器拒绝了,或者被上一个响应拦截器中断了。
             在这种情况下,响应异常拦截器可以帮助我们恢复后台调用。
             */
            responseError: function (rejection) {
              // 对失败的响应进行处理
              // 例如 统一的弹窗提示
              return $q.reject(rejection);
            }
          };
        }])
        /*
         $httpProvider中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到该数组中的常规服务工厂。
         2 在config方法中,将拦截器加入到$httpProvider.interceptors数组中
         */
        .config(['$httpProvider', function ($httpProvider) {
          $httpProvider.interceptors.push('NickInterceptor');
        }])
        .controller('bodyCtl', ['$scope', '$http', function ($scope, $http) {
          $scope.test1 = function () {
            console.log(11);
            $http.get('interceptors.html');
          };
        }])
  </script>
</head>
<body ng-controller="bodyCtl">
<button class="btn" ng-click="test1()">click me</button>
<div ng-view></div>
</body>
</html>

以上所述是小编给大家介绍的Angular中的interceptors拦截器,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
jquery uaMatch源代码
Feb 14 Javascript
Javascript base64编码实现代码
Dec 02 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
Mar 25 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
实例讲解JavaScript中的this指向错误解决方法
Jun 13 Javascript
Bootstrap源码解读排版(1)
Dec 23 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
May 23 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
JavaScript 面向对象基础简单示例
Oct 02 Javascript
Javascript Symbol原理及使用方法解析
Oct 22 Javascript
Angular中的$watch、$watchGroup、$watchCollection
Jun 25 #Javascript
JS实现加载时锁定HTML页面元素的方法
Jun 24 #Javascript
Angular2.js实现表单验证详解
Jun 23 #Javascript
JS实现多张图片预览同步上传功能
Jun 23 #Javascript
Vue组件化通讯的实例代码
Jun 23 #Javascript
JavaScript字符串检索字符的方法
Jun 23 #Javascript
Angular2 组件通信的实例代码
Jun 23 #Javascript
You might like
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
大专生工程监理求职信
2013/10/04 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
体育比赛口号
2014/06/09 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
2014年政教处工作总结
2014/12/20 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
如何在Python项目中引入日志
2021/05/31 Python
关于python类SortedList详解
2021/09/04 Python
Redis Lua脚本实现ip限流示例
2022/07/15 Redis