AngularJS中的嵌套模块

the Nested Modules in AngularJS

本文关键字:模块 嵌套 AngularJS      更新时间:2023-09-26

Background

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

.------------------.
|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 - 应用程序http://docs.angularjs.org/api/ng.directive:ngApp

如何?

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

错误?

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

坏主意?

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

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

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

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

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

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

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

有关更多详细信息,请查看官方开发人员指南。