Angularjs minimiza las mejores prácticas

Resuelto Whisher asked hace 11 años • 7 respuestas

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)?

Whisher avatar Sep 13 '13 16:09 Whisher
Aceptado

¡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.

Selvam Palanimalai avatar Sep 13 '2013 09:09 Selvam Palanimalai

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.

OZ_ avatar Sep 13 '2013 09:09 OZ_

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 strictDila propiedad de configuración:

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

Desactivando DI implícita, usando ng-strict-dila directiva:

<html ng-app="myApp" ng-strict-di>
dizel3d avatar Nov 04 '2014 12:11 dizel3d

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.

Whisher avatar Sep 19 '2013 13:09 Whisher