Введення служби в іншу службу в angularJS


Відповіді:


118

Так. дотримуйтесь правила регулярного введення в angularjs.

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

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

Завдяки @simon. Краще використовувати ін’єкцію Array, щоб уникнути проблеми мінімізації.

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

20
Я пропоную використовувати спосіб введення масиву, щоб уникнути проблем, коли ви захочете зменшити свої сценарії в майбутньому:['service1', function(service1) {}]
Саймон Белангер

2
Ви також можете використовувати ngminабо пов'язане із цим завдання бурчання.
Джон Ледбеттер,

якщо ви хочете отримати доступ до іншого методу з тієї ж служби, я припускаю, що ви не хотіли б вводити ту саму службу в службу; намагаючись назвати це за допомогою "це", схоже, мені не підходить, будь-які думки щодо того, який найкращий спосіб це зробити? Дякую!
timhc22

Просто цікаво, а що, якщо ви введете 'service1' у 'service2', а також введете 'service2' у 'service1', що станеться тоді? Що робити, якщо ініціалізація однієї послуги залежно від ініціалізації іншої послуги?
Xinan

@Xinan у цьому випадку angularjs видасть помилку циклічної залежності. Тому уникайте цього, і в будь-якому випадку це не є хорошою практикою програмування.
jitenagarwal19,

8

Так. Ось так (це постачальник, але застосовується те саме)

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


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

У цьому прикладі $db- це послуга, задекларована в іншому місці програми та введена у функцію постачальника $get.


5

Щоб уникнути плутанини, я думаю, варто також зазначити, що якщо ви використовуєте будь-які інші послуги (наприклад, $ http, $ cookies, $ state) у вашому childService, то вам також потрібно чітко їх заявити.

напр

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 );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.