Como fazer o trabalho da lodash com o Angular JS?

Eu estou tentando usar lodash usá-lo em diretivas ng-repeat , desta forma:

 
Hello {{n}}

Sendo GridController :

 IndexModule.controller('GridController', function () { this._ = _ }) 

No entanto, não está funcionando e, portanto, nada está sendo repetido . Se eu mudar a diretiva para ng-repeat="i in [1,2,3,4,5]" , funcionará.

lodash já está incluído via no

antes do angular . Como posso fazer isso funcionar?

Eu prefiro introduzir ‘_’ globalmente e injetável para testes, veja minha resposta a esta pergunta. Use sublinhado dentro de 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._; }); 

Eu só queria acrescentar alguns esclarecimentos à resposta da @ beret e @ wires. Eles definitivamente ajudaram e entenderam o processo, mas obter todo o processo para se adequar a alguém. É assim que eu configurei meu ambiente angular com o lodash e consegui trabalhar com o yeoman gulp-angular para servir adequadamente

  • bower install lodash --save (Isso adiciona ao bower e salva ao bower json)

  • modifique o bower json para ter carga de lodash antes do angular. (Isso ajuda se você estiver usando gulp injetar e não quiser colocá-lo manualmente em index.html. Caso contrário, coloque-o no index.html antes do link angular)

  • Faça uma nova constante por direção de @ fios.

 'use strict'; angular.module('stackSample') // lodash support .constant('_', window._); 
  • Injete em qualquer serviço angular, filtro ou controlador como você faria qualquer outra coisa:
 .filter('coffeeFilter', ['_', function(_) {...}]); 
  • Para lançá-lo em alguma visualização de HTML angular basta injetá-lo no controlador e atribuir uma variável de escopo a ele:
 .controller('SnesController', function ($scope, _) { $scope._ = _; }) 

Espero que isso ajude alguém a configurar seu site. 🙂

ng-repeat requer uma expressão angular, que tem access a variables ​​de escopo angular. Então, ao invés de atribuir _ a this , atribua-o ao object $scope você injeta no controller:

 IndexModule.controller('GridController', function ($scope) { $scope._ = _; }) 

Demonstração

Não tenho certeza de qual versão do Angular você está usando. Parece que você deveria ter usado a syntax ‘Controller as’ quando usa ‘this’ para acessar variables ​​no dom.

Aqui está a solução com isso e não usando o escopo. http://plnkr.co/edit/9IybWRrBhlgQAOdAc6fs?p=info

   
Hello {{n}}