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 相关文章推荐
使用js 设置url参数
Jul 08 Javascript
JS解决ie6下png透明的方法实例
Aug 02 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
JS动态改变浏览器标题的方法
Apr 06 Javascript
js操作数据库实现注册和登陆的简单实例
May 26 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
彻底学会Angular.js中的transclusion
Mar 12 Javascript
mui上拉加载功能实例详解
Apr 13 Javascript
angularjs指令之绑定策略(@、=、&amp;)
Apr 13 Javascript
js删除数组中的元素delete和splice的区别详解
Feb 03 Javascript
vue实现将一个数组内的相同数据进行合并
Nov 07 Javascript
微信小程序实现拼图小游戏
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
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
php实现Mysql简易操作类
2015/10/11 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
ionic2中使用自动生成器的方法
2018/03/04 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
Python中for循环控制语句用法实例
2015/06/02 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
python SocketServer源码深入解读
2019/09/17 Python
python通过实例讲解反射机制
2019/10/17 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
迎八一活动主题
2014/01/31 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
git stash(储藏)的用法总结
2022/06/25 Servers