<!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拦截器的更多相关文章

  1. angular http interceptors 拦截器使用分享

    拦截器 在开始创建拦截器之前,一定要了解 $q和延期承诺api 出于全局错误处理,身份验证或请求的任何同步或异步预处理或响应的后处理目的,希望能够在将请求移交给服务器之前拦截请求,并在将请求移交给服务 ...

  2. (vue.js)axios interceptors 拦截器中添加headers 属性

    (vue.js)axios interceptors 拦截器中添加headers 属性:http://www.codes51.com/itwd/4282111.html 问题: (vue.js)axi ...

  3. flume1.8 Interceptors拦截器(五)

    1. Flume Interceptors Flume有能力修改/删除流程中的events.这是在拦截器(interceptor)的帮助下完成的.拦截器(Interceptors)是实现org.apa ...

  4. springMVC之mvc:interceptors拦截器的用法

    1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...

  5. springMVC <mvc:interceptors>拦截器的使用

    首先在springMVC.xml配置如下代码 <!-- 拦截器 --> <mvc:interceptors> <bean class="com.base.Acc ...

  6. Interceptors - 拦截器

    1.概述 Flume有能力在运行阶段修改/删除Event,这是通过拦截器(Interceptors)来实现的. 拦截器需要实现org.apache.flume.interceptor.Intercep ...

  7. vue interceptors(拦截器)

    拦截器 顾名思义: 就是半路个您劫持, 拦截器 其实在项目和自己写demo中,总会遇到请求方面需要在请求头里面做判断或者添加一些东西, 这时候 vue 中应用中axios的 interceptors  ...

  8. (转)Angular中的拦截器Interceptor

    什么是拦截器? 异步操作 例子 Session 注入(请求拦截器) 时间戳(请求和响应拦截器) 请求恢复 (请求异常拦截) Session 恢复 (响应异常拦截器) 转之:http://my.osch ...

  9. ionic2+Angular 使用HttpInterceptorService拦截器 统一处理数据请求

    sstep1:新建http-Interceptor.ts文件 import { Injectable } from '@angular/core'; import { HttpInterceptorS ...

随机推荐

  1. java I/O流类概述

    java I/O流类概述

  2. 如何保证Redis中的数据都是热点数据

    redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略.redis 提供 6种数据淘汰策略:volatile-lru:从已设置过期时间的数据集(server.db[i].expires) ...

  3. IBM斥资340亿美元收购红帽

    IBM宣布收购Linux巨头Red Hat,以每股190美元的现金收购其所有已发行股份,总价值约为340亿美元.这一交易是IBM历史上金额最高的一笔收购交易,也成为其在营收持续下滑的压力下,布局云计算 ...

  4. MacBook Apache服务

    想着如何在Mac OS下部署静态网页(纯粹的html,css,js),用惯了windows下的iis,可惜Mac OS下也许只能通过Tomcat或者Apache之类的作为部署容器.听说Mac OS下自 ...

  5. WebApi-JSON序列化循环引用

    Overview 最近被序列化,循环引用的问题,让我浑身酸爽.遇到这种异常是在搭建WebApi的时候,当我返回Linq实例类集合的时候出现的. 下定决心要解决这个问题.循环引用引起的原因是: 比如说: ...

  6. 1003 Emergency (25)(25 point(s))

    problem 1003 Emergency (25)(25 point(s)) As an emergency rescue team leader of a city, you are given ...

  7. Linux驱动之IIC总线

    <作用> 电子设备中有很多IIC设备之间需要进行相互通信,这样就产生了IIC总线,常用来实现设备之间的数据通信.   <IIC总线结构> IIC总线只有两条线,一条是串行数据线 ...

  8. 详解Android基本布局

    一.线性布局 LinearLayout又称为线性布局,是一种非常常用的布局.这个布局会将它包含的控件在线性方向上依次排列.我们可以通过指定它的orientation属性来决定它是垂直方向排列还是水平方 ...

  9. 【洛谷】3469:[POI2008]BLO-Blockade【割点统计size】

    P3469 [POI2008]BLO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每 ...

  10. HDU 5699 货物运输 二分

    货物运输 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5699 Description 公元2222年,l国发生了一场战争. 小Y负责领导工人运输物 ...