[英]Angular : When to use “[]” in modules and controllers
我从Angular开始,在声明(如果这样称呼)模块和控制器时,我不明白何时使用或不使用[]
。
到目前为止,我了解到:
angular.module('app.prof', []).config(config);
表示我声明模块prof
而angular.module('app.prof').config(config);
就是我叫它 。
但是我总是最终在控制器中而不是模块中有[]
,并且当我有两个控制器时,我不知道该做什么了。
我只想了解Angular :(
编辑:添加更多详细信息
在我的Angular项目中,我将Fuse主题与一个称为Yeoman的东西一起使用(如果我理解得很好),因此我永远不会在自己的任何地方写<script>
标签。
例如,我有这个模块:
angular
.module('app.prof')
.config(config);
和这个控制器:
angular
.module('app.prof', [])
.controller('ProfController', ProfController);
我的模块和控制器总是以这种方式声明的,但是有时我会遇到类似“未声明模块”或“未声明控制器”的错误; 让我最终随机将括号放在模块或控制器中,直到它起作用为止。
编辑2:
这是我的主要模块:
angular
.module('fuse', ['app.prof']);
我的教授模块:
angular
.module('app.prof')
.config(config);
和我的教授控制器:
angular
.module('app.prof', [])
.controller('ProfController', ProfController);
这样,整个事情就很好了。 但是当我这样做时:
angular
.module('app.prof', [])
.config(config);
和
angular
.module('app.prof')
.controller('ProfController', ProfController);
我得到:
第二个参数是模块的依赖关系。 由于您目前没有任何依赖项,因此您有一个空数组[]
。
仅在创建新模块时才添加方括号(依赖项)。 每当您只想使用相同的模块时,都不需要括号。 因此,最后每个模块仅应使用[]声明一次。 并且每隔一个时间都应调用不带。
还要确保以正确的顺序导入文件和代码。 否则,当您尝试向其添加控制器时,尚未定义该模块。
小例子。 具有多个控制器的应用模块。
angular.module('app', []);
angular.module('app').controller('aCtrl', [ function () {} ]);
angular.module('app').controller('bCtrl', [ function () {} ]);
// ...
长话短说。 如果声明模块,则需要括号。 如果要使用模块,则不要添加它们。
编辑:再次进行编辑时,需要确保以正确的顺序定义和使用所有内容。
以下内容取决于app.prof
,这意味着app.prof
声明需要在此行之前:
angular.module('fuse', ['app.prof']);
这已经表明已声明模块app.prof
,并且您尝试向其添加配置。 如果未声明app.prof,然后显示类似的错误:
angular.module('app.prof')
.config(config);
这将声明模块app.prof
,并向该模块添加一个控制器:
angular.module('app.prof', [])
.controller('ProfController', ProfController);
这将声明app.prof
模块并立即app.prof
添加一些配置:
angular.module('app.prof', [])
.config(config);
这会将控制器添加到名为app.prof
的现有模块中:
angular.module('app.prof')
.controller('ProfController', ProfController);
我想你应该已经明白了...
对于解决方案,您需要以类似于此的顺序声明它们...一切都在一个文件中还是将它们逐个文件加载都没关系,但是模块声明顺序很重要。
angular.module('app.prof', [])
.config(config);
angular.module('app.prof')
.controller('ProfController', ProfController);
angular.module('fuse', ['app.prof']);
控制器声明可能会在以后发生,但是无论如何您都需要注意顺序。 正如您所说的, fuse
是主要模块,您需要在之前声明app.prof
。
用[[]]表示的是将外部(angular)依赖项注入到模块中并对其进行访问。 请参考以下示例
angular.module('app.proof',['myservice']).controller(function(bootstrap,myservice){
myservice.callmethod();});
希望这可以帮助!
因此,在创建模块时,可以将其他模块作为依赖项添加到计划使用的模块中:
var app = angular.module('myModule', ['Restangular', 'UserService', 'otherModule']);
然后,在创建控制器时,可以使控制器可以使用服务,工厂等。
app.controller('MyNewController', ['$scope', '$http', 'restangular', function($scope, $http, restangular) {
// Your code here
$scope.name = "Daniel";
});
您可以这样声明一个模块:
angular.module('myModule', []);
同样,您可以这样声明一个控制器:
angular.module('myModule')
.controller('MyController', []);
在声明控制器时,您不会在模块中使用空数组符号,因为您是在现有模块上定义控制器。
传递给模块或控制器的空数组( []
)是要注入模块或控制器的依赖项的占位符。 请参阅: AngularJS掺杂注入 。
每个AngularJS项目都有一个“顶层”或根模块。 当您根据ng-app
指令使用应用程序时,该模块会将您的应用程序引导到一起。
在顶层模块中,您声明对应用程序中其他模块的依赖性。 例如:
angular.module('root', ['childModule1', 'childModule2', 'childModule3']);
在控制器中,您可以使用依赖项注入来注入服务,函数或AngularJS的内置库(例如$ http,$ sce或$ q),例如:
angular.module('root')
.controller('RootController', ['$window', '$location', 'myRootService']);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.