看angular documentation for controller那些令我困惑的事情。让我们说有人这样做:
angular.module('foo').controller('controller1', ['$scope', function($scope) {
});
和
<div ng-app='app' ng-controller='controller1'>
</div>
角度如何知道&#39; controller1&#39; 位于模块&#39; foo&#39; ?
此外,如果有人这样做了:
angular.module('bar').controller('controller1', ['$scope', function($scope) {
});
现在哪个角色会选择?
答案 0 :(得分:1)
在此声明ng-app
:
<div ng-app='app' ng-controller='controller1'>
</div>
Angular会查找名为app
的模块定义。像这样:
angular.module('app', []); // notice the []
在第二个参数[]
数组中,Angular需要依赖模块。因此,为了从controller1
模块中包含foo
,您可以这样做:
angular.module('app', ['foo']);
来自bar
模块:
angular.module('app', ['bar']);
在每个中,只有一个名为controller1
的控制器。
那么,当您注册foo
和bar
模块时会发生什么?我认为最后一个获胜。因此,如果您将app
定义为:
angular.module('app', ['foo', 'bar']);
然后,bar
模块controller1
将覆盖注射器内的名称controller1
。
因此,没有内置机制允许跨模块应用相同的名称。因此,您可以使用命名方案来确保控制器是唯一的:
angular.module('bar').controller('bar.controller1', ['$scope', function($scope) {
});
角度如何知道&#39; controller1&#39;位于模块&#39; foo&#39;?
当Angular解析controller1
时,它不知道它所在的模块。一旦模块是一个依赖(在ng-app
中定义的模块上),所有控制器(在所有模块中)仅通过名称解析。
答案 1 :(得分:0)
Angular并不真正知道控制器的来源。您的申请包括foo
或bar
,然后controller1
已注册。
如果您同时包含foo
和bar
controller1
来自最后一个模块。