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 相关文章推荐
javascript编程起步(第七课)
Jan 10 Javascript
探索Emberjs制作一个简单的Todo应用
Nov 07 Javascript
jquery解析JSON数据示例代码
Mar 17 Javascript
js实现select组件的选择输入过滤代码
Oct 14 Javascript
javascript+html5实现仿flash滚动播放图片的方法
Apr 27 Javascript
jquery预加载图片的方法
May 27 Javascript
BootStrap Typeahead自动补全插件实例代码
Aug 10 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 Javascript
js实现贪吃蛇游戏 canvas绘制地图
Sep 09 Javascript
jquery实现拖拽小方块效果
Dec 10 jQuery
详解阿里Node.js技术文档之process模块学习指南
Jan 04 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
React Router基础使用
2017/01/17 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
python 队列详解及实例代码
2016/10/18 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
Python爬虫与反爬虫大战
2020/07/30 Python
局部内部类是否可以访问非final变量?
2013/04/20 面试题
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
应届生骨科医生求职信
2013/10/31 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
给小学生的新年寄语
2014/04/04 职场文书
2016春节放假通知范文
2015/08/18 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
Python 数据可视化之Matplotlib详解
2021/11/02 Python
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL