【问题标题】:Injecting a service into another service in angularJS在angularJS中将服务注入另一个服务
【发布时间】:2014-01-27 02:11:24
【问题描述】:

是否可以在 angularJS 中将一项服务注入到另一项服务中?

【问题讨论】:

    标签: angularjs angularjs-service


    【解决方案1】:

    为了避免任何混淆,我认为还值得一提的是,如果您在 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 );
    

    【讨论】:

      【解决方案2】:

      是的。遵循angularjs中的常规注入规则。

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

      感谢@simon。最好使用数组注入来避免缩小问题。

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

      【讨论】:

      • 我建议您使用数组注入的方式来避免将来要缩小脚本时出现问题:['service1', function(service1) {}]
      • 你也可以使用ngmin或者相关的grunt task。
      • 如果你想从同一个服务访问另一个方法,我想你不会想把同一个服务注入到服务中;尝试使用“this”来调用它似乎对我不起作用,关于什么是最好的方法有什么想法吗?谢谢!
      • 只是想知道如果你将'service1'注入'service2',同时将'service2'注入'service1',会发生什么?如果一个服务的初始化依赖于另一个服务的初始化呢?
      • @Xinan 在这种情况下,angularjs 会抛出循环依赖的错误。所以避免它,无论如何这不是一个好的编程习惯。
      【解决方案3】:

      是的。像这样(这是一个提供者,但同样适用)

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

      在此示例中,$db 是在应用程序的其他位置声明的服务,并且 注入到提供者的$get函数中。

      【讨论】:

        猜你喜欢
        • 2013-12-22
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 2017-01-17
        相关资源
        最近更新 更多