是否有 angular 语法可以在标记中嵌入来自不同模块的控制器?

Is there an angular syntax to embed controllers from different modules in the markup?

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

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

并通过使用包含 submodule1submodule2 作为依赖项的模块引导 angular。

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

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

我还明确指的是页面的手册 angular.bootstrap(document, ['myApp']),因为我使用 require.js 加载所有 JS 文件,因此 I cannot use the ng-app attribute.

我正在使用 angular 1.3.18.

加载模块后,Angular 无法区分它们的组件。是

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

除非它们被定义为

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

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

模块的概念只是用来把things/features放在groups/encapsulation中。当模块被编译和加载时,它们包含的所有factories/services/controllers等都被添加到[=24] =]的注射容器。一旦它们进入 IC,就无法找出某些东西来自哪个模块。

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

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

如果您有多个包含相同 controller/service 名称的模块,那么它会变得有点复杂。如果我没记错的话,将使用最接近主模块的模块 'myApp'。

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