AngularJS中的嵌套模块

时间:2013-09-19 09:35:45

标签: javascript angularjs architecture module

背景

我有N个角度模块。其中一个是自举,并存在整个页面生命周期的根容器。所有其他N-1是嵌套在页面内的游戏,需要动态加载和卸载(How to unload angularjs modules)。

.------------------.
|Container         |
|  .----------.    |
|  |Game      |    |
|  |          |    |
|  |          |    |
|  `----------`    |
`------------------`

详细

每个游戏 - 与作为依赖主容器进行一些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

如何?

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

错误?

我不知道这只是临时错误还是Angular团队决定避免使用嵌套模块。有没有人知道这件事?

不好主意?

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

在该App

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

1 个答案:

答案 0 :(得分:2)

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

  1. Angular模块只是控制器,指令,工厂等的逻辑包装器。 例如,您将拥有模块'main'和几个子模块'moduleA'和'moduleB'
  2. 它们与标记上的模块没有任何关系,它只是应用程序中的逻辑单元。

    1. 在您的示例中,您希望指的是范围。您的应用程序中可能有多个范围,它们可以被投入使用或有孩子。在这种情况下,您可以加载或卸载创建范围的实体
    2. 查看official developer guide了解更多详情。