Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度JS中的依赖注入_Angularjs - Fatal编程技术网

Angularjs 角度JS中的依赖注入

Angularjs 角度JS中的依赖注入,angularjs,Angularjs,我已经阅读了AngularJS文档,但仍然没有我理解的答案 为什么要用两次?一次作为数组元素,第二次作为函数参数 someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) { // ... }]); 如果缩小此代码: someModule.controller('MyController', function($scope, greeter) { // ... }); s

我已经阅读了AngularJS文档,但仍然没有我理解的答案

为什么要用两次?一次作为数组元素,第二次作为函数参数

someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) {
  // ...
}]);

如果缩小此代码:

someModule.controller('MyController', function($scope, greeter) {
  // ...
});
someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) {
  // ...
}]);
您将以(类似于)结尾:

Angular将无法注入依赖项,因为参数名称已丢失

另一方面,如果缩小此代码:

someModule.controller('MyController', function($scope, greeter) {
  // ...
});
someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) {
  // ...
}]);
您将以以下内容结束:

someModule.controller('MyController', ['$scope', 'greeter', function(a, b) {
  // ...
}]);

参数名称可用:Angular的DI可运行。

缩小将您的代码转换为更轻巧、更快速的下载方式。 在将依赖项注入放入函数并使用它之前,您只需要做一些类似于依赖项注入声明的事情,但在这种情况下,您需要使用缩小

您的函数需要“$scope”和“greeter”。 如果你这样写:

someModule.controller('MyController', function($scope, greeter) {  // ...
});
..然后使用缩小,控制器将转向:

someModule.controller('MyController',function(a,b) {  // ...
});
…那么您的控制器“MyController”将无法理解“$scope”和“greeter”到底在哪里,它只会看到一个参数“a”和一个参数“b”

因此,最好的方法是使用数组:

 someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) {  // ...
}]);
…然后使用缩小:

someModule.controller('MyController', ['$scope', 'greeter', function(a, b) {  // ...
}]);
正如您所看到的,数组的第一个和第二个元素没有被转换,javascript将知道“a”和“b”是数组中要放入函数的元素

请注意,如果您编写以下内容:

someModule.controller('MyController', function(a, b) {
  // ...
});
    someModule.controller('MyController', ['$scope', '$log', function($log, $scope) { 
console.log($scope);  
    }]);
您将拥有$log的控制台日志! 这是因为职位和唯一的职位很重要,您可以命名:

    someModule.controller('MyController', ['$scope', '$log', function(Donald, Duck) { 
console.log(Duck);  
    }]);

它会将$log元素的控制台日志发送给您。

minification/uglify可能会破坏代码,否则(但您可以以它不存在的方式进行配置):)我认为这不是真的。如果我使用.controller('createUpdate',函数($scope、$http、$routeParams、$route、$location、$window){……一切都正常。