angularJS의 다른 서비스에 서비스 삽입


답변:


118

예. angularjs의 일반 주입 규칙을 따르십시오.

app.service('service1', function(){});

//Inject service1 into service2
app.service('service2',function(service1){});

@simon에게 감사드립니다. 최소화 문제를 피하기 위해 배열 주입을 사용하는 것이 좋습니다.

  app.service('service2',['service1', function(service1) {}]);

20
난 당신이 미래에 스크립트를 작게를하고 싶을 것이다 때 문제를 방지하기 위해 배열 주입 방법을 사용하는 것이 좋습니다 :['service1', function(service1) {}]
사이먼 Belanger 보낸

2
ngmin또는 관련 grunt 작업을 사용할 수도 있습니다 .
John Ledbetter 2014 년

동일한 서비스에서 다른 방법에 액세스하려면 동일한 서비스를 서비스에 삽입하고 싶지 않을 것입니다. 'this'를 사용하여 호출하려고 시도하는 것이 저에게 효과적이지 않은 것 같습니다. 가장 좋은 방법은 무엇입니까? 감사!
timhc22 2014

'service1'을 'service2'에 주입하고 'service2'를 'service1'에 주입하면 어떻게 될까요? 한 서비스의 초기화가 다른 서비스의 초기화에 따라 달라지면 어떻게됩니까?
Xinan 2016

이 경우 @Xinan은 angularjs가 순환 종속성 오류를 발생시킵니다. 따라서 그것을 피하고 어쨌든 좋은 프로그래밍 관행이 아닙니다.
jitenagarwal19 2014 년

8

예. 이와 같이 (제공자이지만 동일한 사항이 적용됨)

    module.provider('SomeService', function () {


    this.$get = ['$q','$db','$rootScope', '$timeout', 
                function($q,$db,$rootScope, $timeout) {
          return reval;
    }
    });

이 예에서는 $db앱의 다른 곳에서 선언되고 공급자의 $get함수에 삽입 된 서비스 입니다.


5

혼동을 피하기 위해, childService에서 다른 서비스 (예 : $ http, $ cookies, $ state)를 사용하는 경우 명시 적으로 선언해야한다는 점도 언급 할 가치가 있다고 생각합니다.

예 :

function() {
  var childService = function($http, $cookies, parentService) {

  // Methods inherited
  this.method1Inherited = parentService.method1();
  this.method2Inherited = parentService.method2();

  // You can always add more functionality to your child service

  angular.module("app").service("childService", ["$http", "$cookies", "parentService", childService]);

}());

자식 내부에서 사용중인 서비스를 배열로 선언 한 다음 자동으로 주입되거나 $ inject 주석을 사용하여 별도로 주입 할 수 있습니다.

childService.$inject = ["$http", "$cookies", "parentService"]; 
angular.module("app").service("childService ", childService );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.