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 定义新对象方法
Feb 20 Javascript
JavaScript 原型学习总结
Oct 29 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
详解jQuery的Cookie插件
Nov 23 Javascript
老生常谈jacascript DOM节点获取
Apr 17 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
Jun 19 Javascript
微信运维交互机器人的示例代码
Nov 12 Javascript
Node.js实现简单管理系统
Sep 23 Javascript
解决vue项目中出现Invalid Host header的问题
Nov 17 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
Nov 24 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生成HTML静态页面实例代码
2008/08/31 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
php解决安全问题的方法实例
2019/09/19 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
Python实现二维有序数组查找的方法
2016/04/27 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Python之多进程与多线程的使用
2021/02/23 Python
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
2014年教师培训的自我评价
2014/01/03 职场文书
先进个人申报材料
2014/12/30 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
个人欠条范本
2015/07/03 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python
Spring中的@Transactional的工作原理
2022/06/05 Java/Android