繁体   English   中英

角度和控制器功能参数

[英]Angular and controller function parameters

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

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

请参阅https://docs.angularjs.org/tutorial/step_05中的段落“缩小注释”

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

由于Angular将控制器的依赖关系从参数名称推断到控制器的构造函数,如果你要缩小PhoneListCtrl控制器的JavaScript代码,它的所有函数参数也将被缩小,并且依赖注入器将无法识别服务正确。

控制器是可调用的,它们的参数必须注入现有/有效/已注册的依赖项。 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 

如果您没有明确设置-explicitly-要注入的依赖项的名称,那么您永远不应该期望控制器正常工作。 这是一种不好的做法,因为:

  1. 如果缩小,参数名称将会改变(并且您将在某一天缩小脚本)。
  2. 参数名称中的拼写错误,您将花费数小时查找错误。

建议: 始终使用明确的表示法(方式1或2)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM