[英]How does angular resolve controllers defined in modules?
angular.module('foo').controller('controller1', ['$scope', function($scope) {
});
和:
<div ng-app='app' ng-controller='controller1'>
</div>
angular如何知道'controller1'驻留在模块'foo'中 ?
此外,如果有人另外这样做:
angular.module('bar').controller('controller1', ['$scope', function($scope) {
});
角现在选择哪一个?
在此处声明ng-app
:
<div ng-app='app' ng-controller='controller1'>
</div>
Angular将寻找名称为app
的模块定义。 像这样:
angular.module('app', []); // notice the []
在第二个参数[]
数组中,Angular需要依赖模块。 因此,为了包括foo
模块中的controller1
,您可以这样做:
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) {
});
angular如何知道'controller1'驻留在模块'foo'中?
在Angular解析controller1
,它不知道它在哪个模块中。一旦该模块是一个依赖项(依赖于ng-app
定义的模块),则仅解析所有控制器(在所有模块中)他们的名字。
Angular并不真正知道控制器的来源。 您的应用程序包括foo
或bar
,然后注册controller1
。
如果同时包含foo
和bar
controller1
则来自上一个包含的模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.