2013-10-08 67 views
0

我正在嘗試在服務「提供者」中使用服務「工廠」。 最好的辦法是如何做到這一點。 我正在使用不同的模塊。但是當我將服務導入新功能時,會產生一個錯誤。 在服務「提供者」中重用或注入服務的最佳方式是什麼?如何在angularjs的提供者中使用服務「工廠」?

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

供應商是在一個階段之前,可用任何固體服務或其他部件都準備好了,所以你將不能夠直接注入你的服務到供應方。

但是,您可以將服務注入提供程序的$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); 

我不完全按照你的意圖,所以我不能提供更多的信息,但我希望這可以幫助。

來源:

+0

有這個想法是在服務 「提供者」 使用的服務 「工廠」。 當您需要設置模塊並且只能將服務「提供者」與其他服務一起使用時,這非常有用。 runing http://jsfiddle.net/aurigadl/facgT/9/ – AURIGADL

相關問題