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

How does Angular know the names of your constructor arguments?

引自 Angular 教程:

To use a service in Angular, you simply declare the names of the dependencies you need as arguments to the controller's constructor function, as follows:

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

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

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

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

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

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