Angular如何知道构造函数参数的名称?

时间:2015-01-04 06:17:23

标签: javascript angularjs function

引自Angular教程:

  

要在Angular中使用服务,只需声明其名称即可   您需要的依赖项作为控制器构造函数的参数   功能如下:

phonecatApp.controller('PhoneListCtrl', function ($scope, $http) {...}

似乎controller方法通过查看参数名称来检查您请求的服务,例如$scope$http。但这似乎很粗糙。它实际上只是将函数转换为字符串并对其进行切片,如this?或者是否有一些更聪明的幕后行动正在进行?

它如何知道您的控制器请求了哪些服务?

1 个答案:

答案 0 :(得分:3)

你是对的。 Angular只是查看参数名称。这会导致缩小问题,因为缩小可以将function ($scope, $http)转换为function (a, b),然后角度将不知道哪个是什么。

相反,您应该使用长语法:

phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function ($scope, $http) {...}

就其运作方式而言。 Angularjs巧妙地利用了这样一个事实:JavaScript中的每个对象都有一个toString函数来解析和提取参数的名称,然后再决定调用控制器函数的参数。此页面提供了有关它的更多详细信息:http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html