角度和控制器功能参数

时间:2014-08-29 14:33:41

标签: javascript angularjs

我最近一直在做角度工作,我注意到可以省略控制器函数中依赖项的名称数组。如果你这样做,控制器仍然可以正常工作,依赖关系注入就好了。

我确定我错过了什么。这些名字的原因是什么?

2 个答案:

答案 0 :(得分:5)

https://docs.angularjs.org/tutorial/step_05

中的“关于缩小的注释”一节

它用于在缩小后保留对依赖项的注入的字符串引用:

  

因为Angular从名称中推断出控制器的依赖关系   控制器的构造函数的参数,如果你是   缩小PhoneListCtrl控制器的JavaScript代码,全部   函数参数也将被缩小,并且依赖性   注入器无法正确识别服务。

答案 1 :(得分:1)

控制器是可调用的,并且它们的参数必须注入现有/有效/已注册的依赖项。 Angular有三种方式:

  1. 如果传递的控制器(这也适用于提供者)是一个数组,则最后一项是控制器,前一项应该是具有要注入的依赖项名称的字符串。名称计数和arity必须匹配。

    //parameter names are what I want.
    c = mymodule.controller('MyController', ['$scope', '$http', function($s, $h) {}]);
    
  2. 否则,如果传递的控制器具有$inject属性,则期望此类属性是一个字符串数组,这些字符串是依赖项的名称。数组和arity的长度必须匹配。

    con = function($s, $h) {};
    con.$inject = ['$scope', '$http'];
    c = mymodule.controller('MyController', conn);
    
  3. 否则,要注入的名称数组取自参数列表,因此必须相应地命名

    c = mymodule.controller('MyController', function($scope, $http) {});
    //one type, one minification, and you're screwed
    
  4. 如果您没有明确设置-explicitly-要注入的依赖项的名称,那么永远不会期望控制器正常工作。这是一种糟糕的做法,因为:

    1. 如果缩小,参数名称更改(并且 - 将您的脚本缩短为一天)。
    2. 参数名称中的拼写错误,您将花费数小时查找错误。
    3. 建议:始终使用明确的表示法(方式1或2)。