3

我想知道 Angular.js $http 拦截器是否在整个应用程序中共享。
假设我有一个myDependentApp模块,在许多应用程序之间共享。该模块配置了一些拦截器来控制 $http 请求/响应。我通过在应用程序引导程序中声明它来包含该模块:

angular.module('myApp', ['myDependentApp']);

我有应用程序模板:

<html ng-app="myApp">

myDependentApp拦截器会活跃吗myApp

感谢帮助。

4

3 回答 3

6

答案是肯定的,我在这里试过:

var dependentApp = angular.module('dependency',[]).config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push(function ($q) {
        return {
            'request': function (config) {
                console.log('request intercept');
            },

                'response': function (response) {
                console.log('response intercept');
            }
        };
    });
}]);

var app = angular.module('myapp', ['dependency']);
app.controller('mycontroller', ['$scope', '$http', function ($scope, $http) {
    $http.get('http://www.google.com');
}]);

我看到请求被拦截了。这是小提琴:http: //jsfiddle.net/6dbgo6pt/1/

于 2015-02-01T20:57:44.110 回答
1

答案是肯定的。

直接来自文档

角服务是:

延迟实例化——Angular 仅在应用程序组件依赖于它时实例化服务。

单例——依赖于服务的每个组件都获得对服务工厂生成的单个实例的引用。

$http是使用提供者配方的此类服务 createad 之一。

因此,这意味着您应用程序中的每个模块都将提供相同的$http服务,并且那些添加拦截器的模块将与模块共享,因为该$http服务与任何其他使用.service,.factory.provider.

于 2015-02-01T21:27:06.010 回答
0

$http 拦截器

出于全局错误处理、身份验证或任何类型的请求的同步或异步预处理或响应的后处理的目的,希望能够在请求被移交给服务器之前拦截请求并在响应被移交给之前拦截它们启动这些请求的应用程序代码。拦截器利用 Promise API 来满足同步和异步预处理的需求。

拦截器是通过将它们添加到 $httpProvider.interceptors 数组而向$httpProvider注册的服务工厂。工厂被调用并注入依赖项(如果指定)并返回拦截器。

$httpProvider

使用 $httpProvider 更改 $http 服务的默认行为。

于 2015-02-01T20:45:54.630 回答