Angularjs将最佳实践缩小

我正在阅读http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html ,事实certificate,angularjsdependency injection有问题,如果你缩小你的JavaScript,所以我不知道是不是

var MyController = function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .success(function(commits) { $scope.commits = commits }) } 

你应该使用

 var MyController = ['$scope', '$http', function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .success(function(commits) { $scope.commits = commits }) }] 

总而言之,我认为第二个片段是针对老版本的angularjs,但是…

我应该总是使用注射方式(第二个)?

是的 ,总是! 所以即使你的minifer将$ scope变为variablesa和$ httpvariablesb,他们的身份仍然保留在string中。

请参阅AngularJS文档的这个页面 ,向下滚动到关于缩小的注意事项

UPDATE

或者,您可以在构build过程中使用ng-annotate npm包来避免这种冗长。

使用第二个变体更安全,但也可以使用ngmin安全地使用第一个变体。

更新:
现在ng-annotate成为解决这个问题的一个新的默认工具。

只要指出,如果你使用

约曼

没有必要这样做

 var MyController = ['$scope', '$http', function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .success(function(commits) { $scope.commits = commits }) }] 

因为minify中的grunt会考虑如何pipe理DI。

是的,你需要使用显式dependency injection(第二个变体)。 但是,从Angular 1.3.1开始,您可以closures隐式dependency injection,这对解决潜在的重命名问题(缩小之前)是很有帮助的。

使用strictDi config属性closures隐式DI:

 angular.bootstrap(document, ['myApp'], { strictDi: true }); 

closures隐含的DI,使用ng-strict-di指令:

 <html ng-app="myApp" ng-strict-di> 

就像OZ_说的那样,使用ngmin来缩小所有的angular度js文件,比如directive.js service.js。 之后,你可以使用Closure编译器来优化它。

参考:

如何缩小angularjs脚本

与YO合作

您可能想要使用本文中提到的$inject : http : //frontendcollisionblog.com/javascript/angularjs/2015/03/31/something-no-one-tells-you-about-minifying-angularjs-controllers-until -它的太late.html