0

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

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]);
4

1 回答 1

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);

我不太了解你的意图,所以我不能提供更多信息,但我希望这会有所帮助。

资料来源:

于 2013-10-09T01:08:23.147 回答