带有服务依赖性的$ log decorator会导致循环依赖性错误

时间:2014-05-01 21:27:10

标签: javascript angularjs

在我的应用程序中,我正在为$log编写一个装饰器,以便我可以自定义$log的功能,包括调用第三方服务。第三方服务为其内部活动注入$q。现在这会导致循环依赖性错误:

Uncaught Error: Circular dependency: $q <- tploggerService <- $log <- $exceptionHandler <- $rootScope

因为qProvider使用最终使用exceptionHandlerProvider的{​​{1}},我认为这会导致此问题。在装修过程中是否有任何人遇到类似的问题,是否有解决方案来解决这个或不同的模式来解决这个问题?

以下是代码的简单演示,感谢您的帮助:

logProvider

2 个答案:

答案 0 :(得分:1)

从您的服务中获取$ q:

function tploggerService ($injector) {
    var $q;
    this.info = function (data) {
        $q = $injector.get('$q');
        var deferred = $q.defer(); //Yes using defered object. some this performs some actions and some internal stuffs.

        //Doing something...
    };
}

Updated Plunk

答案 1 :(得分:0)

似乎你只能在$provider.decorator()中进行$委托,我想如果你应该把除了使用注入方式之外的业务逻辑放在装饰器函数中。例如:

$provider.decorator('$log',function($delegate){
  $delegate.info = function(){
     var args = Array.prototype.slice(arguments);
     var deferred = $q.defer(); //Doing something...
     $delegate.info.apply(null,args);
  }
});