这是角度、依赖注入和缩小的一个已知问题。而且,问题恰恰出在代码的细节上。
Case 1:
如果没有显式注入,当使用声明的函数作为控制器时,Angular 会尝试从服务名称推断服务。
angular.module('app').controller('MyController', MyController);
function MyController(service1, service2, ...){ ... service1.doSomething ...}
Case 2:
通过显式注入,Angular 按照注入的顺序使用控制器函数参数。
angular.module('app').controller('MyController', MyController);
MyController.$inject = ['service1', 'service2', ...]
function MyController(a, b, ...){ ... a.doSomething ... }
情况 1 每次缩小都会失败,因为服务的名称会改变,并且 Angular 将无法仅通过查看名称来推断 a、b 或 c 所引用的服务。
然而,情况 2 每次都会起作用,因为 Angular 不必猜测,因为 $inject 告诉它 service1 是 a,service 2 是 b 等等。
如果您正在使用像 Gulp 这样的构建实用程序,您可以使用ng-注释 https://www.npmjs.com/package/gulp-ng-annotate在情况 1 中,它将自动为您注入依赖项,并且您的代码应该仍然可以工作。
在我看来,从风格上来说,你应该使用案例 2。我倾向于遵循与John Papa 的 Angular 风格指南 https://github.com/johnpapa/angular-styleguide