当我已经定义了$ httpProvider时,如何在服务中替换$ httpProvider

时间:2016-07-20 13:02:21

标签: angularjs

我有工厂服务:

app.factory('sessionInjector', ['sessionService', 'stateService', '$q', function (sessionService, stateService, $q) {
    var myInjectorInstance = { /* ... */ };

    return myInjectorInstance; 
}]);

现在我为我的模块定义提供者

app.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.interceptors.push('sessionInjector'); 
}]);

现在在dialogService中想要用户角度的$ http提供程序来读取html文件。 但我得到了那个例外:

Circular dependency found: $http <- dialogService <- sessionService <- sessionInjector <- $http <- $templateRequest <- $compile

dialogService用于sessionService。 dialogService看起来像这样:

app.service('sessionService', function ($http, $window, $compile) {
    /* some code */
}

有没有办法在dialogService中使用$ http提供程序而不会抛出错误?

2 个答案:

答案 0 :(得分:0)

有没有办法在dialogService中使用$ http提供程序而不会抛出错误?

如何

而不是将$http注入dialogService,您必须注入注射器...... $injector

然后您可以在进样器范围内执行一个函数。像这样:

$injector.invoke(function ($http) { // <- injecting $http
    // make an http call
});

以下是官方文档:$injector

答案 1 :(得分:0)

要解决这样的循环依赖关系,您可以使用$injector手动注入依赖项并分配给变量

app.service('sessionService', function ( $window, $compile, $injector) {
    var $http = $injector.get('$http');
}