我最近一直在做角度工作,我注意到可以省略控制器函数中依赖项的名称数组。如果你这样做,控制器仍然可以正常工作,依赖关系注入就好了。
我确定我错过了什么。这些名字的原因是什么?
答案 0 :(得分:5)
见https://docs.angularjs.org/tutorial/step_05
中的“关于缩小的注释”一节它用于在缩小后保留对依赖项的注入的字符串引用:
因为Angular从名称中推断出控制器的依赖关系 控制器的构造函数的参数,如果你是 缩小PhoneListCtrl控制器的JavaScript代码,全部 函数参数也将被缩小,并且依赖性 注入器无法正确识别服务。
答案 1 :(得分:1)
控制器是可调用的,并且它们的参数必须注入现有/有效/已注册的依赖项。 Angular有三种方式:
如果传递的控制器(这也适用于提供者)是一个数组,则最后一项是控制器,前一项应该是具有要注入的依赖项名称的字符串。名称计数和arity必须匹配。
//parameter names are what I want.
c = mymodule.controller('MyController', ['$scope', '$http', function($s, $h) {}]);
否则,如果传递的控制器具有$inject
属性,则期望此类属性是一个字符串数组,这些字符串是依赖项的名称。数组和arity的长度必须匹配。
con = function($s, $h) {};
con.$inject = ['$scope', '$http'];
c = mymodule.controller('MyController', conn);
否则,要注入的名称数组取自参数列表,因此必须相应地命名 。
c = mymodule.controller('MyController', function($scope, $http) {});
//one type, one minification, and you're screwed
如果您没有明确设置-explicitly-要注入的依赖项的名称,那么永远不会期望控制器正常工作。这是一种糟糕的做法,因为:
建议:始终使用明确的表示法(方式1或2)。