0

这个 SO question似乎暗示可以通过定义标签属性来使用来自不同模块的控制器,例如:

<div ng-controller="submodule1.controller1">{{ whatever1 }}</div>
<div ng-controller="submodule2.controller2">{{ whatever2 }}</div>

并通过包含submodule1submodule2作为依赖项的模块引导角度。

我一直在尝试这样做,但没有成功。任何人都可以确认这是不可能的或提供指向此构造的工作示例的指针吗?

我明确地谈论ng-controller标签属性,而不是让控制器以编程方式相互交互。

我还明确提到angular.bootstrap(document, ['myApp'])了页面手册,因为我使用 require.js 来加载所有 JS 文件,因此我不能使用ng-app属性

我正在使用角度 1.3.18。

4

2 回答 2

2

一旦加载了模块,Angular 就无法在它们的组件之间产生差异。这是

<div ng-controller="controller1">{{ whatever1 }}</div>
<div ng-controller="controller2">{{ whatever2 }}</div>

除非它们被定义为

angular.module('submodule1').controller('submodule1.controller1', ...)
...

(他们可能不应该这样做,因为对此没有约定,也没有明显的好处)。

于 2015-12-30T15:08:25.993 回答
1

模块的概念仅用于将事物/功能放入组/封装中。当模块被编译和加载时,它们所包含的所有工厂/服务/控制器等都被添加到 Angular 的注入容器中。一旦它们在 IC 中,就无法找出某样东西来自哪个模块。

您可以直接引用控制器而无需指定模块本身。@estus 指出,你可以这样做:

<div ng-controller="controller1">{{ whatever1 }}</div>
<div ng-controller="controller2">{{ whatever2 }}</div>

如果您有多个模块具有相同的控制器/服务名称,那么它会变得有点复杂。如果我没记错的话,将使用最接近您的主模块“myApp”的模块。

如果多个指令共享相同的名称,而不是相互覆盖,它们的行为更像是一种装饰器模式,它们相互补充。

于 2015-12-30T15:27:25.757 回答