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

时间:2015-02-27 10:01:01

标签: javascript angularjs

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) { 
});

现在哪个角色会选择?

2 个答案:

答案 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的控制器。

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

如果您同时包含foobar controller1来自最后一个模块。