繁体   English   中英

如何在模块中定义角度解析控制器?

[英]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名为控制器。

那么,当您同时注册foobar模块时会发生什么呢? 我认为最后一个获胜。 因此,如果您将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并不真正知道控制器的来源。 您的应用程序包括foobar ,然后注册controller1

如果同时包含foobar controller1则来自上一个包含的模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM