将服务注入angularJS中的另一个服务


Answers:


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) {}]
Simon Belanger 2014年

2
您还可以使用ngmin或关联的grunt任务。
约翰·莱德贝特2014年

如果您想从同一服务访问另一种方法,我想您不想将同一服务注入该服务;尝试使用“ this”来称呼它似乎对我似乎不起作用,是否有什么最佳方法的想法?谢谢!
timhc22

只是想知道如果将“ service1”注入“ service2”,同时还将“ service2”注入“ service1”,那会发生什么?如果一个服务的初始化取决于另一服务的初始化怎么办?
新安

在这种情况下,@ Xinan angularjs将引发循环依赖性错误。因此,请避免使用它,无论如何这都不是一种好的编程习惯。
jitenagarwal16年

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 );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.