5

すべての API リクエストにカスタム ヘッダーを挿入しようとしています。ハードコードされたテキストを提供しているときは機能します。

作業コード

myApp.config(['$httpProvider', function ($httpProvider) {
    var requestInterceptor = ['$q', '$rootScope', 
        function ($q, $rootScope) {
            var interceptorInstance = {
                request: function (config) {
                    config.headers['X-MyApp-CustomHeader'] = "foobar"; 
                    return config || $q.when(config);
                }
            };
            return interceptorInstance;
        }];

    $httpProvider.interceptors.push(requestInterceptor);
}]);

動作しないコード

myApp.config(['$httpProvider', function ($httpProvider) {
    var requestInterceptor = ['$q', '$rootScope', '$route',
        function ($q, $rootScope, $route ) {
            var interceptorInstance = {
                request: function (config) {
                    config.headers['X-MyApp-CustomHeader'] = $route.current.params.CustomParameter; 
                    return config || $q.when(config);
                }
            };
            return interceptorInstance;
        }];

    $httpProvider.interceptors.push(requestInterceptor);
}]);

エラー、注入しようとしたとき$route

キャッチされていないエラー: [$injector:cdep] 循環依存関係が見つかりました: $route <- $http http://errors.angularjs.org/1.2.3/ $injector/cdep?p0=%24route%20%3C-%20% 24http

4

1 に答える 1

18

これは既知の問題です。

私の答えをチェックしてください: インターセプターに $http を要求する方法はありますか?

$route$httpどちらがインターセプターに依存するかによって異なります。

myApp.config(['$httpProvider', function ($httpProvider) {
    var requestInterceptor = ['$q', '$rootScope', '$injector',
        function ( $q, $rootScope, $injector ) {
            var interceptorInstance = {
                request: function (config) {
                    var $route = $injector.get('$route');
                    config.headers['X-MyApp-CustomHeader'] = $route.current.params.CustomParameter; 
                    return config || $q.when(config);
                }
            };
            return interceptorInstance;
        }];

    $httpProvider.interceptors.push(requestInterceptor);
}]);

$injector とは何ですか?

$injector は、 provider によって定義されたオブジェクト インスタンスの取得、型のインスタンス化、メソッドの呼び出し、およびモジュールのロードに使用されます。

内部的には、angular.js は $injector を使用して、すべての依存関係が注入されたメソッド ( config / run ブロック ) を呼び出します。これは自動的に行われるため、ほとんど心配する必要はありません。$injector が依存関係の解決に失敗した場合は、手動で解決できます。

于 2014-01-20T08:30:43.703 に答える