Javascript AngularJS如何与JS迷你们一起工作

Javascript AngularJS如何与JS迷你们一起工作,javascript,angularjs,Javascript,Angularjs,AngularJS中的依赖注入实际上是如何工作的 是的,我读了很多东西,我知道如何使用它 假设我们有以下控制器: app.controller('LoginCtrl', ['$scope', '$rootScope', '$http', '$location', function($scope, $rootScope, $http, $location) { /* ... */ }]); 我知道我们应该使用传递数组来使用JS缩微器,所以Angular无论如何都会知道依赖项的真实名称 假设我们实

AngularJS中的依赖注入实际上是如何工作的

是的,我读了很多东西,我知道如何使用它

假设我们有以下控制器:

app.controller('LoginCtrl', ['$scope', '$rootScope', '$http', '$location', function($scope, $rootScope, $http, $location) { /* ... */ }]);
我知道我们应该使用传递数组来使用JS缩微器,所以Angular无论如何都会知道依赖项的真实名称


假设我们实际使用JS minifier,
$scope
被设置为
$s
。Angular如何知道这个
$s
实际上是一个
$scope
,因此它应该具有与
$scope
文档中描述的相同的接口?

缩小过程使函数的所有名称和参数更短,以减少文件的重量。因此,一旦控制器变小,它将如下所示:

函数(a,b,c,d){/*…*/}]

但是,如果您正在使用
$inject
,或者通过函数传递注入数组,它将让您的函数确切地知道应该向控制器中的每个参数注入哪个服务

app.controller('LoginCtrl', [
'$scope', '$rootScope', '$http', '$location', 
function(a, b, c, d) { /* ... */ }]);

因此,一旦将其缩小,仍将保留应注入的服务名称和位置编号(数组中元素的索引),其中每个都链接到控制器函数中参数的索引。因此,正如我们所看到的,顺序很重要

我认为原因是Angular知道$location参数可以作为一个参数提供,它允许全局$scope变量在缩小的代码中提供必要的上下文。@Benjamin Dean抱歉,我不明白。你能详细解释一下吗?Nikki回答了技术原因。考虑代码小型化的最简单方法是:用尽可能短的、非人类可读的标识符替换所有长变量和函数名。缩略语并不会真正改变代码的结构……它们只是使措辞变得更小(很像英语使用首字母缩略词来缩短长短语)。这会减少代码的文件大小,从而加快通过网络传输文件的速度…明白吗?确定吗?我认为我们可以重新排序这些函数的参数,而不必更新数组中的元素。请看一下文档--。它说,“$inject数组中的值的顺序必须与MyController中的参数的顺序相匹配”,仅适用于“$inject属性注释”。对于“内联数组注释”,它只是说“注意保持注释数组与函数声明中的参数同步”。我认为这意味着我们只需要传递和在一个例子中相同数量的参数array@FrozenHeart注意保持注释数组与函数声明中的参数同步。请回答相关问题@Frozenhart,想想简单的js,我不明白它如何在没有严格顺序的情况下将注入链接到参数。我们可以通过实验来检验,但我确信90%的人认为这很重要:)