Angularjs 工厂内的依赖注入

Angularjs dependency injection inside factory

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

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

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

但是说 $ 没有定义。 我也试着在这里注入 $http:

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

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

$.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,这将失败,这将导致记录器被调用等等等等