angular之interceptors拦截器

 

 

<!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>

  

时间: 2024-10-29 00:19:26

angular之interceptors拦截器的相关文章

页面-struc2 中的 interceptors 拦截器 怎么能够返回字符串

问题描述 struc2 中的 interceptors 拦截器 怎么能够返回字符串 2C struc2 中的 interceptors 拦截器 怎么能够返回字符串 原来返回的是到页面jsp现在改成字符串 解决方案 用response write 然后 return null; 解决方案二: 你是想返回json数据吧!在原来struts.xml 返回的jsp 配置成返回类型是json, 解决方案三: PrintWriter out = response.getWriter(); out.print

SpringMVC源码总结(十一)mvc:interceptors拦截器介绍

本文章针对mvc:interceptors标签进行介绍,它的注册过程以及在访问时的拦截过程.  首先说下接口HandlerInterceptor,它有如下三个方法:  ? 1 2 3 4 5 6 7 8 9 10 boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)         throws Exception;   void postHandle(       

flume 使用source interceptors拦截器切分body,自定义字段发送数据至es,es并未预期切分显示

问题描述 flume配置如下:agent.sources=tailagent.channels=memoryChannelagent.sinks=elasticsearchagent.channels.memoryChannel.type=memoryagent.channels.memoryChannel.capacity=10000agent.channels.c1.transactionCapacity=100agent.sources.tail.channels=memoryChanne

详解为Angular.js内置$http服务添加拦截器的方法_AngularJS

前言 在Angular框架中,创建团队为使用者进行了Ajax请求的封装,并通过$http服务暴露出相关的接口.Angular在其官方文档中指出, $http服务底层针对Web常见的安全攻击做出了相应的对策,也就是说使用$http服务封装的Ajax为使用者提供了更为安全的保障.作为一个框架,保证框架的可用性,适配性是很有必要的. Angular在设计,实现中也体现出来了这样的良好风格.我们通常在使用Ajax时,有时候希望我们能够在请求发起前或接收到请求后做一些相应的处理工作,比如:在请求发起前,在

快速学习AngularJs HTTP响应拦截器_AngularJS

任何时候,如果我们想要为请求添加全局功能,例如身份认证.错误处理等,在请求发送给服务器之前或服务器返回时对其进行拦截,是比较好的实现手段. angularJs通过拦截器提供了一个从全局层面进行处理的途径. 四种拦截器 实现 request 方法拦截请求 request: function(config) { // do something on request success return config || $q.when(config); } 该方法会在 $http 发送请求后台之前执行,因

浅析AngularJs HTTP响应拦截器_AngularJS

为何要用拦截器? 任何时候,如果我们想要为请求添加全局功能,例如身份认证.错误处理等,在请求发送给服务器之前或服务器返回时对其进行拦截,是比较好的实现手段.  angularJs通过拦截器提供了一个从全局层面进行处理的途径.  拦截器允许你: 通过实现 request 方法拦截请求: 该方法会在 $http 发送请求道后台之前执行,因此你可以修改配置或做其他的操作.该方法接收请求配置对象(request configuration object)作为参数,然后必须返回配置对象或者 promise

配置-求助,SSH整合后拦截器不起作用

问题描述 求助,SSH整合后拦截器不起作用 struts.xml配置如下 <interceptors> <interceptor name="loginInterceptor" class="com.music.interceptor.LoginInterceptor"></interceptor> <interceptor-stack name="globalInterceptor"> <i

Flume-NG源码阅读:SourceRunner及选择器selector和拦截器interceptor的执行

在AbstractConfigurationProvider类中loadSources方法会将所有的source进行封装成SourceRunner放到了Map<String, SourceRunner> sourceRunnerMap之中.相关代码如下: Map<String, String> selectorConfig = context.getSubProperties( BasicConfigurationConstants.CONFIG_SOURCE_CHANNELSEL

如何在基于注解风格的Spring-MVC中使用拦截器

Spring-MVC如何使用拦截器,官方文档只给出了非注解风格的例子.那么基于注解风格如何使用拦截器呢? 基于注解基本上有2个可使用的定义类,分别是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter: <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <be