Angular - 发现循环依赖
Angular - Circular dependency found
我收到上述错误。这里有一些代码片段,经过简化。
申请:
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) {
......
}
错误:
Circular dependency found: $http <- $templateRequest <- $compile <- ngDialog <- APIInterceptor <- $http <- $translatePartialLoader
如果我不将 ngDialog 注入我的拦截器,一切都很好。有人可以解释为什么我会收到循环依赖错误吗?
谢谢
核心问题是:
APIInterceptor
注入ngDialog
ngDialog
内部注入 $http
$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;
}
};
});
我收到上述错误。这里有一些代码片段,经过简化。 申请:
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) {
......
}
错误:
Circular dependency found: $http <- $templateRequest <- $compile <- ngDialog <- APIInterceptor <- $http <- $translatePartialLoader
如果我不将 ngDialog 注入我的拦截器,一切都很好。有人可以解释为什么我会收到循环依赖错误吗?
谢谢
核心问题是:
APIInterceptor
注入ngDialog
ngDialog
内部注入$http
$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;
}
};
});