【问题标题】:how should be used a service "factory" in a provider of angularjs?应该如何在 angularjs 的提供者中使用服务“工厂”?
【发布时间】:2013-10-15 21:09:24
【问题描述】:

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

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

【问题讨论】:

    标签: javascript angularjs service provider


    【解决方案1】:

    在任何实体服务或其他组件准备好之前,提供程序在一个阶段可用,因此您将无法将服务直接注入提供程序。

    但是,您可以将服务注入到您的提供者的$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);
    

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

    来源:

    【讨论】:

    • 是的,这个想法是在服务“提供者”中使用服务“工厂”。当您需要设置模块并且只能将服务“提供者”与您拥有的其他服务一起使用时,这很有用。运行jsfiddle.net/aurigadl/facgT/9
    猜你喜欢
    • 2015-07-22
    • 2015-07-24
    • 2016-10-07
    • 2016-02-18
    • 2017-09-13
    • 2011-04-15
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多