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

Angularjs 这两种定义控制器的方法有什么区别?,angularjs,Angularjs,关于控制器定义。这两者之间有什么区别 angular.module('myApp', ['ui.bootstrap']); function CarouselCtrl($scope) { ... } 而这个 var myAppModule = angular.module('myApp', ['ui.bootstrap']); myAppModule.controller('CarouselCtrl', function($scope){ ... } 似乎他们都可以访问ui

关于控制器定义。这两者之间有什么区别

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

function CarouselCtrl($scope) {
   ...
}
而这个

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

myAppModule.controller('CarouselCtrl', function($scope){
    ...
}
似乎他们都可以访问ui.bootstrap。
第一个CarouselCtrl函数是如何连接到我的角度模块的?

第一个是全局函数。你不应该使用它。它“连接”到您的模块,因为它连接到所有东西

第二个是在模块中声明的控制器。这很好,这是一种常见的方法。您可以有一个带有指令的模块,一个带有服务的模块,等等

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

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

myAppModule.controller('CarouselCtrl', [ '$scope', '$http', function($scope, $http){
    ...
}]);
正如Golo Roden在评论中指出的,您可以通过如下方式引用控制器来避免全局变量:

angular.module('myApp').controller(...);
这样,应用程序可以缩小而不中断,如手册中所述
原因是依赖项注入按名称查找组件。可以缩小函数名,但数组中的值永远不会更改。数组中的顺序很重要。它将1-1与函数中的参数匹配。

第一个是全局函数。你不应该使用它。它“连接”到您的模块,因为它连接到所有东西

第二个是在模块中声明的控制器。这很好,这是一种常见的方法。您可以有一个带有指令的模块,一个带有服务的模块,等等

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

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

myAppModule.controller('CarouselCtrl', [ '$scope', '$http', function($scope, $http){
    ...
}]);
正如Golo Roden在评论中指出的,您可以通过如下方式引用控制器来避免全局变量:

angular.module('myApp').controller(...);
这样,应用程序可以缩小而不中断,如手册中所述
原因是依赖项注入按名称查找组件。可以缩小函数名,但数组中的值永远不会更改。数组中的顺序很重要。它将1-1与函数中的参数匹配。

此外,如果您想使用ngmin确保缩小不会破坏应用程序,请使用此/秒方法。请注意,您也引入了一个全局变量:
myAppModule
。IMHO通过调用
angular.module('myApp').controller(…)动态解析模块是更好的方法。通过这种方式,您可以跳过变量
myAppModule
,因此您没有全局变量,而且它也可以跨文件工作。是的,这是真的。谢谢你指出这一点!我通常使用闭包来避免混乱。这可能是一个愚蠢的问题。。。但当我这样定义控制器时:
angular.module('myApp').controller(…)如何定义第二个控制器?您可以写两行:
angular.module('myApp').controller('shopsCtrl',f1);角度。模块('myApp')。控制器('foodtrl',f2),或者您可以这样做:
angular.module('myApp')。controller('shopsCtrl',f1)。controller('foodtrl',f2)这与您使用承诺时发现的模式类似:
。成功(/*something*/)。错误(/*something*/)另外阅读手册如果您想使用ngmin确保缩小不会破坏应用程序使用此/秒方法请注意,您也引入了一个全局变量:
myAppModule
。IMHO通过调用
angular.module('myApp').controller(…)动态解析模块是更好的方法。通过这种方式,您可以跳过变量
myAppModule
,因此您没有全局变量,而且它也可以跨文件工作。是的,这是真的。谢谢你指出这一点!我通常使用闭包来避免混乱。这可能是一个愚蠢的问题。。。但当我这样定义控制器时:
angular.module('myApp').controller(…)如何定义第二个控制器?您可以写两行:
angular.module('myApp').controller('shopsCtrl',f1);角度。模块('myApp')。控制器('foodtrl',f2),或者您可以这样做:
angular.module('myApp')。controller('shopsCtrl',f1)。controller('foodtrl',f2)这与您使用承诺时发现的模式类似:
。成功(/*something*/)。错误(/*something*/)阅读手册