12

背景

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

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

细节

每个游戏 - 与 angular-module 的方式相同,它作为依赖项主容器进行一些 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 - 应用程序 http://docs.angularjs.org/api/ng.directive:ngApp

如何?

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

漏洞?

而且我不知道这只是暂时的错误还是 Angular 团队决定避免使用嵌套模块。有人知道吗?

馊主意?

或者,如果针对此类问题使用模块是个坏主意 - 最好的决定是什么?

在该应用程序中使用模块的原因

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

1 回答 1

2

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

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

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

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

查看官方开发者指南了解更多详情。

于 2013-10-30T22:16:50.803 回答