Estou lendo http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html e descobriu-se que injeção de dependência angularjs tem problemas se você diminuir o seu javascript para que eu estou querendo saber se em vez de
var MyController = function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .success(function(commits) { $scope.commits = commits }) }
você deveria usar
var MyController = ['$scope', '$http', function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .success(function(commits) { $scope.commits = commits }) }]
Tudo em tudo eu pensei que o segundo trecho foi para a versão antiga do angularjs, mas ….
Devo sempre usar o injetar (o segundo)?
Sim , sempre! Portanto, mesmo que seu minifer converta $ scope para a variável ae $ http para a variável b, sua identidade ainda será preservada nas strings.
Veja esta página de documentos do AngularJS, role para baixo até A Note on Minification .
ATUALIZAR
Alternativamente, você pode usar o pacote ng-annotate npm em seu processo de construção para evitar essa verbosidade.
É mais seguro usar a segunda variante, mas também é possível usar a primeira variante com segurança com ngmin .
ATUALIZAR:
Agora o ng-annotate se torna uma nova ferramenta padrão para resolver esse problema.
Apenas para salientar que, se você usar
Yeoman
não há necessidade de fazer como
var MyController = ['$scope', '$http', function($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .success(function(commits) { $scope.commits = commits }) }]
porque o grunhido durante o minify leva em conta como gerenciar o DI.
Sim, você precisa usar a injeção de dependência explícita (segunda variante). Mas como o Angular 1.3.1 você pode desativar a injeção de dependência implícita , é realmente útil resolver problemas potenciais com a renomeação de uma vez (antes da minificação).
Desativando o DI implícito, usando a propriedade de configuração strictDi
:
angular.bootstrap(document, ['myApp'], { strictDi: true });
Desligando o DI implícito, usando a diretiva ng-strict-di
:
Como o OZ_ disse, use ngmin para minimizar todos os arquivos js angulares, como directive.js service.js. Depois disso, você pode usar o compilador Closure para otimizá-lo.
ref:
Como minify scripts angularjs
Construa com YO
Você pode querer usar $inject
como mencionado aqui :
MyController.$inject = ['$scope', '$http']; function MyController($scope, $http) { $http.get('https://api.github.com/repos/angular/angular.js/commits') .success(function(commits) { $scope.commits = commits }) }