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 サービスは次のとおりです。

遅延インスタンス化 – Angular は、アプリケーション コンポーネントがサービスに依存している場合にのみサービスをインスタンス化します。

シングルトン– サービスに依存する各コンポーネントは、サービス ファクトリによって生成された単一のインスタンスへの参照を取得します。

$httpプロバイダーのレシピを使用して作成されたそのようなサービスの 1 つです。

したがって、これは、アプリ内のすべてのモジュールがまったく同じ$httpサービスを提供され、インターセプターを追加するモジュールがモジュールと共有されることを意味します。サービスは、または$httpを使用する他のAngularまたはカスタムビルドサービスと同様にシングルトンであるためです。.service.factory.provider

于 2015-02-01T21:27:06.010 に答える