这两种定义控制器的方法有什么区别?

时间:2014-06-26 09:21:30

标签: angularjs

关于控制器定义。这有什么区别...

angular.module('myApp', ['ui.bootstrap']);

function CarouselCtrl($scope) {
   ...
}

这......

var myAppModule = angular.module('myApp', ['ui.bootstrap']);

myAppModule.controller('CarouselCtrl', function($scope){
    ...
}

似乎他们都可以访问ui.bootstrap。 如何将第一个CarouselCtrl函数连接到我的angular.module?

1 个答案:

答案 0 :(得分:5)

第一个是全局功能。你不应该使用它。这是"连接"到你的模块,因为它连接到一切。

第二个是模块中声明的控制器。这很好,这是一种常用的方法。您可以拥有一个包含指令的模块,一个包含服务的模块等。More about organizing your application

最安全的选项是使用注释:

var myAppModule = angular.module('myApp', ['ui.bootstrap']);

myAppModule.controller('CarouselCtrl', [ '$scope', '$http', function($scope, $http){
    ...
}]);

正如Golo Roden在评论中指出的那样,你可以通过像这样引用控制器来避免全局变量:

angular.module('myApp').controller(...);

这样,应用程序可以在不中断的情况下缩小,如手册https://docs.angularjs.org/guide/di中所述 原因是依赖注入按名称查找组件。你可以缩小函数的名称,但数组中的值永远不会改变。数组中的顺序很重要。它与函数中的参数匹配1-1。