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
引自 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