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 对象的属性和方法4种不同的类型
Mar 19 Javascript
javascript中&quot;/&quot;运算符常见错误
Oct 13 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
Mar 15 Javascript
javascript实现数字验证码的简单实例
Feb 10 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
AngularJS指令中的绑定策略实例分析
Dec 14 Javascript
微信小程序中遇到的iOS兼容性问题小结
Nov 14 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
Vue实现图片与文字混输效果
Dec 04 Javascript
Vue 中使用 typescript的方法详解
Feb 17 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
Mar 03 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
解决pyttsx3无法封装的问题
2018/12/24 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
django中使用POST方法获取POST数据
2019/08/20 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
Python selenium的基本使用方法分析
2019/12/21 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Django models文件模型变更错误解决
2020/05/11 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
致短跑运动员广播稿
2014/01/09 职场文书
档案接收函
2014/01/13 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
《称象》教学反思
2014/04/25 职场文书
党员个人剖析材料
2014/09/30 职场文书
九不准学习心得体会
2016/01/23 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python