Angularjs minimiza las mejores prácticas
Estoy leyendo http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html y resultó que la inyección de dependencia de angularjs tiene problemas si minimizas tu javascript, así que Me pregunto si en lugar de
var MyController = function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.then(function(response) {
$scope.commits = response.data
})
}
Deberías usar
var MyController = ['$scope', '$http', function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.then(function(response) {
$scope.commits = response.data
})
}]
Considerándolo todo, pensé que el segundo fragmento era para la versión anterior de angularjs pero...
¿Debo utilizar siempre la forma de inyección (la segunda)?
¡Sí , siempre! De esta manera, incluso si su minifer convierte $scope en la variable a y $http en la variable b, su identidad aún se conserva en las cadenas.
Consulte esta página de documentos de AngularJS, desplácese hacia abajo hasta Una nota sobre la minificación .
ACTUALIZAR
Alternativamente, puede usar el paquete ng-annotate npm en su proceso de compilación para evitar esta verbosidad.
Es más seguro utilizar la segunda variante pero también es posible utilizar la primera variante de forma segura con ngmin .
ACTUALIZACIÓN:
Ahora ng-annotate se convierte en una nueva herramienta predeterminada para resolver este problema.
Sí, es necesario utilizar la inyección de dependencia explícita (segunda variante). Pero desde Angular 1.3.1 puedes desactivar la inyección de dependencia implícita, lo que es realmente útil para resolver problemas potenciales al cambiar el nombre de una vez (antes de la minificación).
Desactivar DI implícita, usando strictDi
la propiedad de configuración:
angular.bootstrap(document, ['myApp'], {
strictDi: true
});
Desactivando DI implícita, usando ng-strict-di
la directiva:
<html ng-app="myApp" ng-strict-di>
Sólo para señalar que si usas
Hacendado
no hay necesidad de hacer me gusta
var MyController = ['$scope', '$http', function($scope, $http) {
$http.get('https://api.github.com/repos/angular/angular.js/commits')
.then(function(response) {
$scope.commits = response.data
})
}]
porque el gruñido durante la minificación tiene en cuenta cómo gestionar DI.