2015-01-04 68 views
1

从角教程引用:Angular如何知道构造函数参数的名称?

要使用角服务,只需声明你需要作为参数传递给控制器​​的构造函数 功能 依赖的名称,具体如下:

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

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

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

回答

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

+0

你不需要使用长的语法。这是难以维系的。在构建js时,请参阅ngannotate作为注入长语法的工具。 https://github.com/olov/ng-annotate –

+1

@PeterAshwell这是正确的,你不需要如果使用ng-annotate。我不同意这很丑陋。这有点难以维持,但并不多。 –

相关问题