1

上記のエラーが発生しています。以下は、単純化されたコードの一部です。応用:

app = angular.module('app', ['app.classes', 'ngDialog' .....]);

モジュール構成:

app.config(
function ($httpProvider, $translateProvider, $translatePartialLoaderProvider) {
    $translateProvider.preferredLanguage(lang);
    $translateProvider.useLoader('$translatePartialLoader', {
        urlTemplate: 'api/PartialTranslationLoad?lang={lang}&table={part}'
    });
    $translatePartialLoaderProvider.addPart('...');
    $translatePartialLoaderProvider.addPart('...');
    $translateProvider.useSanitizeValueStrategy('sanitize');

    $httpProvider.interceptors.push('APIInterceptor');
  }
);

インターセプター サービスは app.classes モジュールにあります。

classes = angular.module("app.classes", []);

classes.service('APIInterceptor', function ($q, $rootScope, $location, $window, $injector, ngDialog) {
    ......
}

エラー:

循環依存が見つかりました: $http <- $templateRequest <- $compile <- ngDialog <- APIInterceptor <- $http <- $translatePartialLoader

インターセプターに ngDialog を注入しなければ、すべて問題ありません。循環依存エラーが発生する理由を誰か説明してもらえますか?

ありがとう

4

1 に答える 1

5

中心的な問題は次のとおりです。

  1. APIInterceptor注入するngDialog
  2. ngDialog内部に注入します$http
  3. $http注入APIInterceptorします(インターセプターを追加したため$httpProvider

最も簡単な解決策は、必要なときに手動で$injector取得することです。ngDialog

簡単な例:

app.factory('APIInterceptor', function($q, $rootScope, $location, $window, $injector) {

  return {

    request: function(config) {

      var ngDialog = $injector.get('ngDialog');

      return config;
    }
  };
});
于 2016-01-20T06:41:38.327 に答える