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 相关文章推荐
Track Image Loading效果代码分析
Aug 13 Javascript
JS中 用户登录系统的解决办法
Apr 15 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
Aug 18 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
Aug 02 Javascript
功能强大的Bootstrap效果展示(二)
Aug 03 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
Bootstrap Table中的多选框删除功能
Jul 15 Javascript
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
vue ssr服务端渲染(小白解惑)
Nov 10 Javascript
Vue性能优化的方法
Jul 30 Javascript
js基于canvas实现时钟组件
Feb 07 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
joomla组件开发入门教程
2016/05/04 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错
2018/11/06 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
python妙用之编码的转换详解
2017/04/21 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Python continue语句实例用法
2020/02/06 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
幼儿教师研修感言
2014/02/12 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
初中家长评语大全
2014/12/26 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
小学生读书笔记
2015/07/01 职场文书