我正在尝试在服务“提供商”中使用服务“工厂”。 如何做到最好的方法。 我正在使用不同的模块。但是当我将服务导入新功能时,它会产生错误。 在服务“提供者”中重用或注入服务的最佳方法是什么。
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]);
答案 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);
我并不完全遵循你的意图所以我不能提供更多信息,但我希望这会有所帮助。
来源: