可以将2个以上的AngularJS模块分配给相同的DOM元素

时间:2013-12-10 17:35:57

标签: javascript angularjs

我的场景是经典的门户/ CMS小部件场景:

  1. AngularJS可能在页面上,也可能不在页面上
  2. 页面上可能有或没有任意数量的小部件
  3. 每个小部件可能是一个小部件系列的成员,多个系列可能在同一页面上交织在一起
  4. 页面上可能有多个小部件实例
  5. 不同的开发团队将被分配到不同的小部件系列
  6. “家庭”概念只是一组小部件通过数据或目的相互关联,相互通信并影响彼此的UI。此外,多个家庭可以在同一页面上混合使用。

    AngularJS似乎将开发人员推向页面根目录的一个模块,使用控制器来处理页面的各个部分。但是,这意味着来自不同团队的开发人员可能会以不同的冲突方式影响pageApp模块。

    似乎需要手动引导方法来定位DOM的部分或使用特定模块的“部分视图”。

    angular.element(document).ready(function() {
             angular.module('myApp', []);
             angular.bootstrap(document, ['myApp']);
           });
    

    ...但我对根据免责声明失去的东西感到紧张

      

    angular.bootstrap不会动态创建模块。你必须创建   任何自定义模块,然后再将它们作为参数传递。

    ...我猜你不能将多个模块应用于同一个DOM元素?正确的吗?

    如果无法将多个模块分配给同一个根DOM元素,那么推荐的方法是什么?

    我认为家庭/家庭内部的沟通可以由酒吧/子模型处理。

    但每个小部件都是模块吗?如果是这样,那么同一小部件​​的多个实例是否需要不同的模块名称 - 动态生成(例如,thing1,thing2)?

    每个小部件都不能成为控制器,因为这意味着混合族必须具有相同的模块。

    编辑1 :(示例) 给定页面具有依赖于xhr-data的列表小部件和详细小部件。它们彼此依赖,但可以在页面的任何位置。单击列表中的项目会更改详细信息。页面上还有另外两个小部件。一个有多个选择器,影响另一个显示的xhr数据量。最后,最后一个独立的小部件是一个独立的手风琴。可以放置小部件,使得没有单个HTML节点明确地封装每个族。

1 个答案:

答案 0 :(得分:0)

我认为你误解了模块。模块注入其他模块,因此您可以随意混合搭配。视图(部分或完整页面)将与控制器相关。控制器可以访问已注入控制器所在模块的模块中的任何功能。

使用您的小部件,您很可能希望将窗口小部件系列组织到单独的模块中,然后将一个或多个这些模块注入到与视图相关的控制器的模块中。这允许您根据视图的特定需求进行混合和匹配。各个小部件可以是小部件系列模块中的功能,服务,指令和过滤器的混合。

如果您遇到不同系列中的小部件需要使用相同服务(例如 - 通用API)的情况,请将服务放在一个单独的模块中,该模块注入需要它的小部件系列模块或任何其他模块需要它。

我希望这会让你朝着更好的方向前进。模块和依赖注入很棒,因为你可以用很多不同的方式混合和匹配。

如果您提供一些小部件,小部件系列,常用服务以及您在各种页面上设想它们的具体示例,那么我可以为您提供有关如何组织代码的一些具体想法。