如何在angularjs的提供者中使用服务“工厂”?

时间:2013-10-08 19:11:32

标签: javascript angularjs service provider

我正在尝试在服务“提供商”中使用服务“工厂”。 如何做到最好的方法。 我正在使用不同的模块。但是当我将服务导入新功能时,它会产生错误。 在服务“提供者”中重用或注入服务的最佳方法是什么。

http://jsfiddle.net/aurigadl/facgT/5/

var moduleService = angular.module('templatesServices', []);
moduleService.factory('templateSrv',['$q', function($q){ 
    return {
        data: function(){
            console.log('In factory');
            return 2000;
        }
    }
}])

function  login(templateSrv){
  this.$get     = angular.noop;   
  this.getAcces = function(){
    return 'some data';
  };
}   

login.$inject = ['templatesServices'];

angular.module('loginProvider', ['templatesServices']).provider('login', ['caliopewebTemplateSrv',login]);

1 个答案:

答案 0 :(得分:0)

在任何可靠的服务或其他组件准备就绪之前,提供商可以处于阶段,因此您将无法将服务直接注入提供商。

但是,您可以将服务注入提供程序的$get函数,在实际实例化服务时使用。因此,loginProvider无法访问templateSrv但您的login服务可以执行此操作,只要定义了templateSrv的模块'需要'loginProvider被定义为。它似乎是在你的例子(angular.module('loginProvider', ['templatesServices']))中这样做,但小提琴似乎非常不同。

var templateModule = angular.module('templateModule', []);
templateModule.factory('templateSrv',[function(){ 
    return {
        // ...
    };
}]);

function loginProvider(){
    this.$get = ['templateSrv', 'otherService', function(templateSrv, otherService) {
      // Use templateSrv/otherService (from templateModule or loginModule) somehow
    }];
    this.getAccess = function(){
        return 'some data';
    };
}

angular.module('loginModule', ['templateModule'])
    .provider('login', loginProvider);

我并不完全遵循你的意图所以我不能提供更多信息,但我希望这会有所帮助。

来源: