underscore template remove item from first examples array javascript angularjs lodash

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 a bower 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._ = _; })

Demo