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 页面只自动刷新一次
Jul 10 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
Apr 27 Javascript
JS正则中的RegExp对象对象
Nov 07 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
js判断客户端是iOS还是Android等移动终端的方法
Dec 11 Javascript
jquery中post方法用法实例
Oct 21 Javascript
JS获取数组最大值、最小值及长度的方法
Nov 24 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
Mar 17 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
Mar 21 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
Apr 11 Javascript
Vue父子之间值传递的实例教程
Jul 02 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实现框架(一)
2006/10/09 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
python通过索引遍历列表的方法
2015/05/04 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
python常用排序算法的实现代码
2019/11/08 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
农田水利实习自我鉴定
2013/09/19 职场文书
矿泉水广告词
2014/03/20 职场文书
《搭石》教学反思
2014/04/07 职场文书
化工专业自荐书
2014/06/16 职场文书
技术员岗位职责
2015/02/04 职场文书
保卫工作个人总结
2015/03/03 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
python程序的组织结构详解
2021/12/06 Python