不明白为什么这个AngularJS不需要注入$inject服务就可以工作

不明白为什么这个AngularJS不需要注入$inject服务就可以工作,angularjs,Angularjs,即使我没有注入定制服务,我也不明白为什么下面的代码可以工作。当你必须注射和不注射的时候我都不知道 Angular足够聪明,可以查看控制器参数的名称,并找出需要注入的内容。但是,如果您缩小代码,则需要手动指定要作为字符串插入的内容(例如,MyController.$inject=['$scope','bareService'];),因为参数名称将被损坏 例如,这: function MyController($scope, bareService) { $scope.testVal = ba

即使我没有注入定制服务,我也不明白为什么下面的代码可以工作。当你必须注射和不注射的时候我都不知道


Angular足够聪明,可以查看控制器参数的名称,并找出需要注入的内容。但是,如果您缩小代码,则需要手动指定要作为字符串插入的内容(例如,
MyController.$inject=['$scope','bareService'];
),因为参数名称将被损坏

例如,这:

function MyController($scope, bareService) {
  $scope.testVal = bareService.str1;
}
可以简化为以下内容:

function MyController(a, b) {
  a.testVal = b.str1;
}

这将破坏依赖注入。

您正在注入服务。将命名函数替换为匿名函数:

angular.module('svccApp')
  .controller('MyController', function($scope, bareService) {
  $scope.testVal = bareService.str1;
});

在实践中,这与您正在做的相同,您将看到它几乎反映了您将服务注入控制器的任何示例。

我看到了有关最小化问题的引用。我还注意到有一些包(比如ngmin)以某种方式解决了这个问题。我有几点担心。1) 什么是最佳实践?2) 如果我按照指南通过显式地提到可注入性来证明我的代码是最小的,那么我就不能轻松地进行测试。我是新手,大多数经验丰富的angular开发人员都做些什么?我个人喜欢使用ng annotate(ngMin的替代品),但它并不适用于所有情况。你注释掉的那句话也完全正确。这不应该让测试变得更困难。如果你正在寻找最佳实践,这里有一个风格指南,可以解决这个问题,谢谢rob。我将添加ngmin。我心胸狭窄,喜欢把事情说清楚。“一直”不工作让我担心。我会尝试添加我的依赖项,并对我的代码进行足够的测试,以捕获错误(希望如此)。我想知道是否有办法告诉Angular不要这么聪明,并强迫我使我的注射剂正确?您知道这是否可行吗?ng min实际上已被弃用,您应该改用ng annotate。如果您使用的是Angular 1.3,您可以像这样初始化应用程序:
,它不会尝试从您的参数名称中插入任何内容
angular.module('svccApp')
  .controller('MyController', function($scope, bareService) {
  $scope.testVal = bareService.str1;
});