Angularjs依赖注入工厂内部

时间:2015-04-09 13:59:23

标签: angularjs dependency-injection

我正在尝试按照本教程实现错误日志记录: http://engineering.talis.com/articles/client-side-error-logging/

错误记录正常,但是当我想将日志发送到服务器时,我遇到了问题。我无法提出http请求。我试过了:

   $.ajax({type: "POST"...})

但是说没有定义$。 此外,我试图在这里注入$ http:

loggingModule.factory( "exceptionLoggingService", ["$log","$window", "traceService","$http"...

但后来我收到了error。 任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:2)

$ .ajax()是一个jQuery函数。你正在使用AngularJS。所以这并不奇怪。

你有一个循环依赖。这意味着您的exceptionLoggingService依赖于$ http,$ http依赖于(传递)exceptionLoggingService。要解决此错误,您可以动态查找$ http服务,而不是将其注入:

loggingModule.factory('exceptionLoggingService', ['$injector', ..., function($injector, ...) {

    var sendErrorToServer = function(error) {
        $http = $injector.get('$http');
        $http.post(...);
    }
}

请注意,仍然存在循环依赖,这可能会导致问题是当$ http失败时调用记录器:这将调用记录器使用$ http,这将失败,这将导致记录器被调用,等等等等。