2013-10-08 7 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 함수에 서비스를 삽입 할 수는 있습니다. 따라서 loginProvidertemplateSrv에 액세스 할 수 없지만 templateSrv이 정의 된 모듈이 '필요'인 경우 loginProvider이 정의 된 경우 login 서비스가 액세스 할 수 있습니다. 그것은 당신의 예 (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