Wstrzyknięcie usługi do innej usługi w angularJS


Odpowiedzi:


118

Tak. postępuj zgodnie z regułą regularnego wstrzykiwania w angularjs.

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

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

Dzięki @simon. Lepiej jest użyć wstrzykiwania tablicy, aby uniknąć problemu z minimalizacją.

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

20
Sugeruję użycie metody wstrzykiwania tablicy, aby uniknąć problemu, gdy będziesz chciał zminimalizować swoje skrypty w przyszłości:['service1', function(service1) {}]
Simon Belanger

2
Możesz także użyć ngminlub powiązanego zadania gruntownego.
John Ledbetter,

jeśli chciałbyś uzyskać dostęp do innej metody z tej samej usługi, zakładam, że nie chciałbyś wstrzyknąć tej samej usługi do usługi; próba nazywania tego za pomocą „tego” nie wydaje się działać w moim przypadku, jakieś przemyślenia na temat najlepszego sposobu zrobienia tego? dzięki!
timhc22

Zastanawiam się tylko, co się stanie, jeśli wstrzykniesz „service1” do „service2”, a także wstrzykniesz „service2” do „service1”, co się wtedy stanie? A jeśli inicjalizacja jednej usługi zależy od inicjalizacji drugiej usługi?
Xinan,

@Xinan w takim przypadku angularjs zgłosi błąd cyklicznej zależności. Więc unikaj tego, a mimo to nie jest to dobra praktyka programistyczna.
jitenagarwal19

8

Tak. W ten sposób (to jest dostawca, ale to samo dotyczy)

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


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

W tym przykładzie $dbjest to usługa zadeklarowana w innym miejscu aplikacji i wstrzyknięta do funkcji dostawcy $get.


5

Aby uniknąć nieporozumień, myślę, że warto również wspomnieć, że jeśli korzystasz z jakichkolwiek innych usług (np. $ Http, $ cookies, $ state) w swojej usłudze childService, to również musisz je wyraźnie zadeklarować.

na przykład

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

}());

Możesz zadeklarować usługi, których używasz w swoim dziecku w tablicy, a następnie zostaną one wstrzyknięte automatycznie, lub wstrzyknąć je osobno z adnotacją $ inject:

childService.$inject = ["$http", "$cookies", "parentService"]; 
angular.module("app").service("childService ", childService );
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.