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 17 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
js实现身份证号码验证的简单实例
Feb 19 Javascript
JavaScript导出Excel实例详解
Nov 25 Javascript
js类式继承与原型式继承详解
Apr 07 Javascript
详细讲解vue2+vuex+axios
May 27 Javascript
浅谈Node Inspector 代理实现
Oct 19 Javascript
JavaScript实现微信号随机切换代码
Mar 09 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
Jul 26 Javascript
js实现适配移动端的拖动效果
Jan 13 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
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中利用XML技术构造远程服务(下)
2006/10/09 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
php判断当前操作系统类型
2015/10/28 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
python中装饰器级连的使用方法示例
2017/09/29 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
采购主管工作职责
2013/12/12 职场文书
房屋公证委托书
2014/04/03 职场文书
社会实践的活动方案
2014/08/22 职场文书
个人违纪检讨书
2014/09/15 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android