【问题标题】:Angular - Circular dependency foundAngular - 发现循环依赖
【发布时间】:2016-01-19 17:20:14
【问题描述】:

我收到上述错误。这是一些简化的代码片段。 应用:

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

如果我不将 ngDialog 注入到我的拦截器中,一切都很好。有人可以解释为什么我会收到循环依赖错误吗?

谢谢

【问题讨论】:

  • 您能否提供一些更接近我的代码的小细节?我基本上明白什么是循环引用,我只是不明白我是如何进入它的?谢谢。

标签: angularjs ng-dialog


【解决方案1】:

核心问题是:

  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;
    }
  };
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多