可以在Angular中注入一个完整的模块吗?

时间:2014-10-30 16:34:58

标签: angularjs

是否可以将完整的模块注入控制器而不是单独注入每个服务?

例如:

var app = angular.module('myApp', ['myApp.core']);

angular.module('myApp.core', [])
  .factory('ABService', function() {
    return {
      getA: function() {
        return 'A';
      },
      getB: function() {
        return 'B';
      }
    }
  })
  .factory('AnotherService', function() {
    return {
      calc: function(a, b) {
        return a + b;
      }
    }
  })


app.controller('MainCtrl', function($scope, 'myApp.core') {
    ABService.getA();
    AnotherService.calc(2, 2);
});

而不是

app.controller('MainCtrl', function($scope, ABService, AnotherService) {
        ABService.getA();
        AnotherService.calc(2, 2);
    });

2 个答案:

答案 0 :(得分:0)

没有

  

为什么?

您无法将模块注入控制器,让我们看看这张图片: Angular: How does it work

我们可以从中看到:模块是一种自我组件,它构建在控制器,指令,服务和过滤器之上,等等。

真正的问题来自:

模块可以没有控制器吗?

  

是。   模块中的控制器不是必需的。它几乎取决于该模块的工作,它完全可以由服务和指令组成。

我们可以将模块中的服务注入另一个模块的控制器吗?

  

是。   您完全可以,当您尝试构建商店网站时,通常会使用此做法,但在更多情况下可能会发生这种做法。

您可能拥有以下模块:浏览项目,搜索项目等等。

  

但是如何以这种方式创建购物车

让我们看看:购物车看起来像是我的一个组成部分。

  

为什么?

因为我想要与其他代码分开测试, 它也像一个组件一样构建,应该拥有它自己独特的服务和指令,并且从我的观点来看,应该从应用程序的其余部分派生出来。

  

所以我们应该建立一个模块!

确切地说,无论何时您尝试从商店的模块控制器使用购物车,您只需注入帮助您从该模块构建购物车的服务,您可以将规则应用于商店的控制器。

就你的问题而言: 我认为您正在尝试做什么,或至少在您的情况下可以做的事情:

要将模块a中的服务注入位于模块b中的控制器,则无需注入"完整的模块进入控制器,它没有多大意义。

我希望我解释它听起来和我脑子里听起来一样好:)。

答案 1 :(得分:0)

不,但如果您真的愿意,可以将您的服务包装成一个“上帝”服务(我个人不会推荐)

angular.module('myApp.core', [])
  .factory('ABService', function() {
    return {
      getA: function() {
        return 'A';
      },
      getB: function() {
        return 'B';
      }
    }
  })
  .factory('AnotherService', function() {
    return {
      calc: function(a, b) {
        return a + b;
      }
    }
  })
  .factory('GodService', function(ABService, AnotherService) {
    return {
      ABService: ABService,
      AnotherService: AnotherService
    }
  })

然后您可以注入GodService并致电ABServiceAnotherService