HTML5技术

angular之interceptors拦截器 - webNick

字号+ 作者:H5之家 来源:H5之家 2017-05-15 16:00 我要评论( )

!DOCTYPE htmlhtml ng-app="nickApp"headmeta charset="UTF-8"meta content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"titleinterceptors/titlescript src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"/s

<!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UTF-8"> <meta 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 ng-click="test1()">click me</button> <div ng-view></div> </body> </html>

  

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • angular之$broadcast、$emit、$on传值 - webNick

    angular之$broadcast、$emit、$on传值 - webNick

    2017-05-14 18:00

  • 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道

    【AngularJS中的自定义服务service VS factory VS provider】---它们

    2017-05-08 13:04

  • Angular vs React 最全面深入对比 - 葡萄城控件技术团队

    Angular vs React 最全面深入对比 - 葡萄城控件技术团队

    2017-05-04 16:05

  • 随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 - 在路在的张

    随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 -

    2017-04-22 08:04

网友点评
c