AngularJS中的嵌套模块

Eug*_*ets 12 javascript architecture module angularjs

背景

我有N个角度模块.其中之一是引导的根容器并存在整个页面生命周期.所有其他N-1是嵌套在页面内的游戏,需要动态加载和卸载(如何卸载angularjs模块).

.------------------.
|Container         |
|  .----------.    |
|  |Game      |    |
|  |          |    |
|  |          |    |
|  `----------`    |
`------------------`
Run Code Online (Sandbox Code Playgroud)

细节

每个游戏 - 与作为依赖主容器进行一些API交互的角度模块相同.

经过一些实验,我发现在Angularjs 1.1.5嵌套模块中几乎(!)工作正常:http: //plnkr.co/edit/kJao7o

但是新的一个Angularjs(1.2.0-rc2)被破坏了:http://plnkr.co/edit/ZyhbRu

几乎为什么?

这个例子仍然引发异常:

错误:参数'GameCtrl'不是函数,未定义

我尝试使用ng-include来防止AngularJS自动注入.但仍有同样的问题(http://plnkr.co/edit/EM1MbB);

怎么了?

我知道在同一页面上使用嵌套的ng-app是不可能的 http://docs.angularjs.org/api/ng.directive:ngApp

怎么样?

但是如何在同一页面上使用多个嵌套角度模块(使用自己的控制器)?

错误?

我不知道它只是暂时的bug或Angular团队决定避免使用嵌套模块.有没有人知道这件事?

馊主意?

或者,如果使用模块来解决这个问题是个坏主意 - 最好的决定是什么?

在该App中使用模块的原因

  • 隔离名称的范围(以避免名称的冲突).我可以保证两个或更多未来游戏中的任何一个都不会使用相同的ctrls名称或其他东西;
  • 要卸载模块(我不知道是AngularJs有可能 - 但我要去尝试);

Art*_*mis 2

哦!我刚刚意识到你的想法。实际上你对 Angular 构建组件的理解不正确。

  1. Angular 模块只是控制器、指令、工厂等的逻辑包装器。例如,您将拥有模块“main”和几个子模块“moduleA”和“moduleB”

它们与标记上的模块没有任何关系,它只是应用程序中的逻辑单元。

  1. 在您的示例中,您希望指的是范围。您的应用程序中可能有多个范围,并且它们可以被雇用或有子项。在这种情况下,您可以加载或卸载创建范围的实体

请参阅官方开发者指南了解更多详细信息。