Javascript AngularJS控制器注入依赖项-为什么构造函数有[]?

Javascript AngularJS控制器注入依赖项-为什么构造函数有[]?,javascript,angularjs,Javascript,Angularjs,翻阅AngularJS文档,我发现了以下内容: 这是非常清晰的。InvoiceController的构造函数直接作为.controller()中的第二个参数调用 进一步了解并设置要注入InvoiceController的依赖项,给出了以下代码: angular.module('invoice2', ['finance2']) .controller('InvoiceController', ['currencyConverter', function(currencyConverter) {

翻阅AngularJS文档,我发现了以下内容:

这是非常清晰的。InvoiceController的构造函数直接作为.controller()中的第二个参数调用

进一步了解并设置要注入InvoiceController的依赖项,给出了以下代码:

angular.module('invoice2', ['finance2'])
.controller('InvoiceController', ['currencyConverter', function(currencyConverter) {
  this.qty = 1;
  this.cost = 2;
  this.inCurr = 'EUR';
  this.currencies = currencyConverter.currencies;

  this.total = function total(outCurr) {
    return currencyConverter.convert(this.qty * this.cost, this.inCurr, outCurr);
  };
  this.pay = function pay() {
    window.alert("Thanks!");
  };
}]);
使用finance2.js

angular.module('finance2', [])
.factory('currencyConverter', function() {
  var currencies = ['USD', 'EUR', 'CNY'];
  var usdToForeignRates = {
    USD: 1,
    EUR: 0.74,
    CNY: 6.09
  };
  var convert = function (amount, inCurr, outCurr) {
    return amount * usdToForeignRates[outCurr] / usdToForeignRates[inCurr];
  };

  return {
    currencies: currencies,
    convert: convert
  };
});
我目前无法理解为什么注入语法需要第二个参数的
[]
括号。 我可以看到模块的依赖关系定义,并且有很好的文档记录,它需要输入到
.module()
但是为什么需要
.controller('name',[constructor(dependency param])
,而不是
.controller('name',constructor(dependency param))

kokeksibir的链接中详细描述了该问题…
总而言之:

Angular从控制器构造函数的参数名称推断控制器的依赖关系。经过缩小过程后,函数名称会发生更改;用依赖关系名称(以字符串形式提供)注释函数可以解决此问题。

kokeksibir的链接中对该问题进行了详细描述…
总而言之:

Angular从控制器构造函数的参数名称推断控制器的依赖关系。经过缩小过程后,函数名称会发生更改;用依赖关系名称(以字符串形式提供)注释函数可以解决此问题。

kokeksibir的链接中对该问题进行了详细描述…
总而言之:

Angular从控制器构造函数的参数名称推断控制器的依赖关系。经过缩小过程后,函数名称会发生更改;用依赖关系名称(以字符串形式提供)注释函数可以解决此问题。

kokeksibir的链接中对该问题进行了详细描述…
总而言之:
Angular从控制器构造函数的参数名称推断控制器的依赖关系。在缩小过程后,函数名称会被更改;用依赖关系名称(以字符串形式提供)注释函数可以解决此问题。

请参阅“缩小注意事项”一节有关文件

感谢你在马科斯的回答下所写的评论

那么,第二个参数可以是对象、函数构造函数,也可以是数组,其中数组也具有不同的可能声明可能性,这对吗

第二个参数可以是一个函数,也可以是一个数组,其中依赖项的名称为字符串,控制器函数为最后一个元素。第二个参数不能是对象。第一个参数可以是中的对象,用于同时声明一组控制器:

{"nameOfController": function(aDInameThatIsUnsafe){...}, "anotherController": ["firstDI", "secondDI", function(firstDI, secondDI) {...}]}
有关文档,请参见“缩小说明”一节

感谢你在马科斯的回答下所写的评论

那么,第二个参数可以是对象、函数构造函数,也可以是数组,其中数组也具有不同的可能声明可能性,这对吗

第二个参数可以是一个函数,也可以是一个数组,其中依赖项的名称为字符串,控制器函数为最后一个元素。第二个参数不能是对象。第一个参数可以是中的对象,用于同时声明一组控制器:

{"nameOfController": function(aDInameThatIsUnsafe){...}, "anotherController": ["firstDI", "secondDI", function(firstDI, secondDI) {...}]}
有关文档,请参见“缩小说明”一节

感谢你在马科斯的回答下所写的评论

那么,第二个参数可以是对象、函数构造函数,也可以是数组,其中数组也具有不同的可能声明可能性,这对吗

第二个参数可以是一个函数,也可以是一个数组,其中依赖项的名称为字符串,控制器函数为最后一个元素。第二个参数不能是对象。第一个参数可以是中的对象,用于同时声明一组控制器:

{"nameOfController": function(aDInameThatIsUnsafe){...}, "anotherController": ["firstDI", "secondDI", function(firstDI, secondDI) {...}]}
有关文档,请参见“缩小说明”一节

感谢你在马科斯的回答下所写的评论

那么,第二个参数可以是对象、函数构造函数,也可以是数组,其中数组也具有不同的可能声明可能性,这对吗

第二个参数可以是一个函数,也可以是一个数组,其中依赖项的名称为字符串,控制器函数为最后一个元素。第二个参数不能是对象。第一个参数可以是中的对象,用于同时声明一组控制器:

{"nameOfController": function(aDInameThatIsUnsafe){...}, "anotherController": ["firstDI", "secondDI", function(firstDI, secondDI) {...}]}


API显然希望该参数是一个数组。符号
[]
只是创建一个空数组。但是为什么在.controller()中缺少它呢如果没有提供依赖项?@Stefan,因为它是一个可选参数?Javascript是动态的,不需要为这样的函数匹配一定数量的参数。我不知道,因为我不是Angular用户,但这似乎应该由Angular API文档来描述。这说明了什么?它是已描述。有关文档,请参阅“缩小说明”部分。API显然希望该参数是一个数组。符号
[]
只会创建一个空数组。但为什么在.controller()中缺少它如果没有提供依赖项?@Stefan,因为它是一个可选参数?Javascript是动态的,不需要为这样的函数匹配一定数量的参数。我不知道,因为我不是Angular用户,但这似乎应该由Angular API文档来描述。这说明了什么?它是已经描述过。有关文档,请参阅“缩小说明”部分。API显然希望该参数是一个数组。符号
[]
只会创建一个空数组。但为什么