我正试图在$ exceptionHandler装饰器中处理错误,如下所示,
var app = angular.module('myApp',['toaster']);
app.config(function($provide){
$provide.decorator('$exceptionHandler',function($delegate,toaster){
toaster.pop('error','text','error');
$delegate(exception, cause);
});
});
Here是傻瓜。 这给了我以下错误,
Error: [$injector:cdep] Circular dependency found: $rootScope <- toaster <- $exceptionHandler <- $rootScope
我正在使用AngularJS-Toaster来显示错误。我现在如何在装饰器内注入烤面包机服务?
答案 0 :(得分:8)
您可以将$injector
注入装饰器并将注射包装在一个函数中。这会延迟注入烤面包机服务,直到您调用$exceptionHandler
,从而阻止循环依赖。
var app = angular.module('myApp',['toaster']);
app.config(function($provide){
$provide.decorator('$exceptionHandler',function($delegate,$injector){
return function (exception, cause) {
var toaster = $injector.get('toaster');
toaster.pop('error','text','error');
}
});
});
要扩展 为什么 这是一个循环依赖,您必须查看注入的服务所需的内容,以及装饰器。
toaster
服务依赖于$rootScope
,并被注入$exceptionHandler
的装饰器中。但是,$rootScope
依赖于$exceptionHandler
。这最终会创建一个循环引用。
如果注入$http
或$q
而不是toaster
,您会发现相同的行为,因为它们也依赖于$rootScope
。它不是toaster
特别是问题...而是尝试将行为应用于依赖 $rootScope依赖性> $rootScope
。