Javascript 在AngularJS中定义控制器的两种方法?

Javascript 在AngularJS中定义控制器的两种方法?,javascript,angularjs,controller,Javascript,Angularjs,Controller,我在AngularJS中看到了定义控制器的两种不同模式: myApp.controller('myControllerName', function($scope) { // ... my controller code ... }); 及 在依赖项注入中,分别添加参数 这两个编码例程之间的区别是什么?对于JavaScript和AngularJS的低级方面,我很想得到详细的答案。两者都会做同样的事情,但当我们缩小代码时,后者是有用的 缩小代码将缩短函数中的局部变量和参数名称。 例如,缩

我在AngularJS中看到了定义控制器的两种不同模式:

myApp.controller('myControllerName', function($scope) {
    // ... my controller code ...
});

在依赖项注入中,分别添加参数


这两个编码例程之间的区别是什么?对于JavaScript和AngularJS的低级方面,我很想得到详细的答案。

两者都会做同样的事情,但当我们缩小代码时,后者是有用的

缩小代码将缩短函数中的局部变量和参数名称。 例如,缩小后,您的代码片段将更改为以下内容:

myApp.controller('myControllerName', function(a) {

});


由于angular inject服务基于参数名,因此它找不到名为“a”的提供程序,因此失败

两者都将做相同的事情,但当我们缩小代码时,后者很有用

缩小代码将缩短函数中的局部变量和参数名称。 例如,缩小后,您的代码片段将更改为以下内容:

myApp.controller('myControllerName', function(a) {

});


由于angular inject服务基于参数名,因此它找不到名为“a”的提供程序,因此失败

第二种方法用于解决缩小问题

因为Angular从 控制器构造函数的参数,如果要 缩小PhoneListCtrl控制器的JavaScript代码,所有 函数参数也将被缩小,并且依赖性 喷油器将无法正确识别服务

我们可以通过用名称注释函数来克服这个问题 的依赖项,作为字符串提供,不会缩小


第二种方法用于解决缩小问题

因为Angular从 控制器构造函数的参数,如果要 缩小PhoneListCtrl控制器的JavaScript代码,所有 函数参数也将被缩小,并且依赖性 喷油器将无法正确识别服务

我们可以通过用名称注释函数来克服这个问题 的依赖项,作为字符串提供,不会缩小


两个示例的效果相同。使用第一个模式Angle时,通过将函数转换为字符串解析参数名称。当使用第二种模式时,名称显式地作为字符串提供

第二种模式很有用,因为它是缩小生产代码的良好实践。任何好的缩微器都会重命名参数标识符,因此第一个示例的结果如下:

a.controller('myControllerName',function(a){});
a.controller('myControllerName',['$scope',function(a){}]);
在这种情况下,Angular将不再知道要注入哪个服务,因为它将解析参数名,获取
a
,并尝试注入
a
服务(该服务可能存在,也可能不存在,但肯定不是您想要的)

第二个示例将简化为以下内容:

a.controller('myControllerName',function(a){});
a.controller('myControllerName',['$scope',function(a){}]);

这一次,Angular将提供正确的服务。控制器功能中的
a
是对所提供服务的引用,一切都将按预期工作。

两个示例具有相同的效果。使用第一个模式时,Angular通过将函数转换为字符串来解析参数名。当使用第二种模式时,名称显式地作为字符串提供

第二种模式很有用,因为它是缩小生产代码的良好实践。任何好的缩微器都会重命名参数标识符,因此第一个示例的结果如下:

a.controller('myControllerName',function(a){});
a.controller('myControllerName',['$scope',function(a){}]);
在这种情况下,Angular将不再知道要注入哪个服务,因为它将解析参数名,获取
a
,并尝试注入
a
服务(该服务可能存在,也可能不存在,但肯定不是您想要的)

第二个示例将简化为以下内容:

a.controller('myControllerName',function(a){});
a.controller('myControllerName',['$scope',function(a){}]);

这一次,Angular将提供正确的服务。控制器功能中的
a
是对所提供服务的引用,一切都将按预期工作。

因此,如果我没有计划缩减代码,是否总是使用第一种方式?它是否适用于所有类型的依赖注入?在这种情况下,编写更短、更可读的代码(以及更少的代码重复)的愿望合法吗?@Reflection是的,如果您不打算缩小代码,您可以使用第一种模式(您真的确定吗?:)。无论如何,这两种方法都是正确的。为了确保这一点:如果我使用NodeJS,缩小JavaScript代码是否就像缩小传统网站服务器端的PHP代码一样(据我所知,这是从未发生过的事情)?@Reflection-大概你的Angular应用程序正在被提供给浏览器。纯在服务器上没有多大意义。您应该缩小提供给浏览器的任何脚本。即使没有远程HTTP请求?例如,在本地主机或PhoneGap应用程序中。显然有一些开销,但是在这些情况下缩小真的是强制性的吗?那么,如果我没有计划缩小我的代码,总是使用第一种方法对吗?它是否适用于所有类型的依赖注入?在这种情况下,编写更短、更可读的代码(以及更少的代码重复)的愿望合法吗?@Reflection是的,如果您不打算缩小代码,您可以使用第一种模式(您真的确定吗?:)。无论如何,这两种方法都是正确的。为了确保这一点:如果我使用NodeJS,缩小JavaScript代码是否就像缩小传统网站服务器端的PHP代码一样(据我所知,这是从未发生过的事情)?@Reflection-大概你的Angular应用程序正在被提供给浏览器。纯在服务器上没有多大意义。您应该缩小提供给浏览器的任何脚本。即使没有远程HTTP请求?例如,在本地主机或PhoneGap应用程序中。显然有一些开销,但在未来的一段时间里,缩小规模真的是强制性的吗