javascript - template - ¿Cómo hacer que lodash funcione con Angular JS?
underscore merge (4)
Estoy tratando de usar lodash en ng-repeat
directivas ng-repeat
, de esta manera:
<div ng-controller="GridController" ng-repeat="n in _.range(5)">
<div>Hello {{n}}</div>
</div>
Siendo GridController
:
IndexModule.controller(''GridController'', function () {
this._ = _
})
Sin embargo, no funciona y, por lo tanto, no se repite nada. Si cambio la directiva a ng-repeat="i in [1,2,3,4,5]"
, funcionará.
lodash
ya está incluido a través de <script>
en <header>
before angular
. ¿Cómo puedo hacer que funcione?
No estoy seguro de qué versión de Angular estás usando. Parece que debiste haber usado la sintaxis de "Controlador como" cuando usas "esto" para acceder a variables en el dom.
Aquí está la solución con esto y no usando el alcance. http://plnkr.co/edit/9IybWRrBhlgQAOdAc6fs?p=info
<body ng-app="myApp" ng-controller="GridController as grid">
<div ng-repeat="n in grid._.range(5)">
<div>Hello {{n}}</div>
</div>
</body>
Prefiero presentar "_" a nivel mundial e inyectable para las pruebas. Vea mi respuesta a esta pregunta. Use subrayado dentro de los controladores.
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._;
});
Solo quería agregar algunas aclaraciones a la respuesta de @ beret y @ wires. Definitivamente ayudaron y entendieron todo, pero poner todo el proceso en orden podría ser adecuado para alguien. Así es como configuré mi entorno angular con lodash y lo puse en funcionamiento con gulp-angular para servirlo correctamente
bower install lodash --save
(Esto agrega abower install lodash --save
json)modifique bower json para tener carga lodash antes que angular. (Esto ayuda si está usando gulp inject y no quiere ponerlo manualmente en index.html; de lo contrario, colóquelo en index.html antes del enlace angular)
Haga una nueva constante por dirección @ wire.
''use strict''; angular.module(''stackSample'') // lodash support .constant(''_'', window._);
- Inyecte en cualquier servicio angular, filtro o controlador como lo haría con cualquier otra cosa:
.filter(''coffeeFilter'', [''_'', function(_) {...}]);
- Para lanzarlo a una vista html angular, solo inyéctelo en el controlador y asígnele una variable de ámbito:
.controller(''SnesController'', function ($scope, _) { $scope._ = _; })
Espero que esto ayude a alguien a configurar su sitio. :)
ng-repeat
requiere una expresión angular, que tiene acceso a variables de ámbito angular. Entonces, en lugar de asignar _
a this
, asígnelo al objeto $scope
que inyecta en el controlador:
IndexModule.controller(''GridController'', function ($scope) {
$scope._ = _;
})