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 相关文章推荐
JQuery 应用 JQuery.groupTable.js
Dec 15 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
Apr 08 Javascript
Egret引擎开发指南之发布项目
Sep 03 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
Jan 05 Javascript
Web程序员必备的7个JavaScript函数
Jun 14 Javascript
原生JavaScript制作计算器
Oct 16 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
vue拖拽排序插件vuedraggable使用方法详解
Aug 21 Javascript
小程序实现搜索框功能
Mar 26 Javascript
javascript自定义右键菜单插件
Dec 16 Javascript
详解vue 组件
Jun 11 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中计算程序运行时间的类代码
2012/11/03 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
zbar解码二维码和条形码示例
2014/02/07 Python
从零学Python之hello world
2014/05/21 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Python实现快速计算词频功能示例
2018/06/25 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
参观监狱心得体会
2014/01/02 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
运动会通讯稿100字
2015/07/20 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js