javascript - técnica - Use subrayado dentro de los controladores angulares
recomendaciones para el subrayado (6)
¿Cómo uso la biblioteca de guiones bajos dentro de los controladores angulares?
En esta publicación: AngularJS limitTo por los últimos 2 registros alguien sugirió asignar una variable _ al rootScope para que la biblioteca esté disponible para todos los ámbitos dentro de la aplicación.
Pero no tengo claro dónde hacerlo. Quiero decir, ¿debería ir en la declaración del módulo de la aplicación? es decir:
var myapp = angular.module(''offersApp'', [])
.config([''$rootScope'', function($rootScope) { }
Pero entonces, ¿dónde cargo la lib de subrayado? Acabo de tener en mi página de índice la directiva ng-app y la referencia de guiones tanto para ang-js como para guiones de subrayado?
index.html
:
<head>
</head>
<body ng-app="offersApp">
...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="scripts/vendor/angular.js"></script>
<script src="scripts/vendor/underscore.js"></script>
...
¿Cómo logro esto?
Cuando incluye Underscore, se une al objeto window
y, por lo tanto, está disponible globalmente.
Entonces puede usarlo desde el código angular tal como está.
También puede envolverlo en un servicio o una fábrica, si desea que se lo inyecte:
var underscore = angular.module(''underscore'', []);
underscore.factory(''_'', [''$window'', function($window) {
return $window._; // assumes underscore has already been loaded on the page
}]);
Y luego puede solicitar el _
en el módulo de su aplicación:
// Declare it as a dependency of your module
var app = angular.module(''app'', [''underscore'']);
// And then inject it where you need it
app.controller(''Ctrl'', function($scope, _) {
// do stuff
});
He implementado la sugerencia de @satchmorun aquí: https://github.com/andresesfm/angular-underscore-module
Para usarlo:
Asegúrate de haber incluido underscore.js en tu proyecto
<script src="bower_components/underscore/underscore.js">
Consíguelo:
bower install angular-underscore-module
Añada angular-underscore-module.js a su archivo principal (index.html)
<script src="bower_components/angular-underscore-module/angular-underscore-module.js"></script>
Agregue el módulo como una dependencia en la definición de su aplicación
var myapp = angular.module(''MyApp'', [''underscore''])
Para usar, agregue como una dependencia inyectada a su Controlador / Servicio y está listo para usar
angular.module(''MyApp'').controller(''MyCtrl'', function ($scope, _) { ... //Use underscore _.each(...); ...
Si no te importa usar lodash, prueba https://github.com/rockabox/ng-lodash lo completa completamente, por lo que es la única dependencia y no necesitas cargar ningún otro archivo de script como lodash.
Lodash está completamente fuera del alcance de la ventana y no "espera" que se haya cargado antes de su módulo.
También puedes echar un vistazo a este módulo para angular
Yo uso esto:
var myapp = angular.module(''myApp'', [])
// allow DI for use in controllers, unit tests
.constant(''_'', window._)
// use in views, ng-repeat="x in _.range(3)"
.run(function ($rootScope) {
$rootScope._ = window._;
});
Consulte https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection a mitad de camino para obtener más información sobre la run
.
puedes usar este módulo -> https://github.com/jiahut/ng.lodash
esto es para lodash
así que underscore