Use sublinhado dentro de controladores angulares

Como uso a biblioteca de sublinhados dentro de controladores angularjs?

Neste post: AngularJS limitTo pelos últimos 2 registros alguém sugeriu atribuir uma variável _ ao rootScope para que a biblioteca esteja disponível para todos os escopos dentro do aplicativo.

Mas não estou claro onde fazer isso. Quero dizer, deve ir na declaração do módulo de aplicativo? ie:

var myapp = angular.module('offersApp', []) .config(['$rootScope', function($rootScope) { } 

Mas então, onde eu carrego sublinhado lib? Acabei de ter na minha página de índice a diretiva ng-app e a referência de script para as bibliotecas angular-js e underscore?

index.html :

    ...    ... 

Como faço para conseguir isso?

Quando você inclui Sublinhado, ele se anexa ao object de window e, portanto, está disponível globalmente.

Então você pode usá-lo a partir do código angular como está.

Você também pode envolvê-lo em um serviço ou fábrica, se quiser que ele seja injetado:

 var underscore = angular.module('underscore', []); underscore.factory('_', ['$window', function($window) { return $window._; // assumes underscore has already been loaded on the page }]); 

E então você pode pedir o _ no módulo do seu aplicativo:

 // 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 }); 

Eu implementei a sugestão do @satchmorun aqui: https://github.com/andresesfm/angular-underscore-module

Para usá-lo:

  1. Certifique-se de ter incluído underscore.js em seu projeto

      
  2. Pegue:

     bower install angular-underscore-module 
  3. Adicione o arquivo angular-underscore-module.js ao seu arquivo principal (index.html)

      
  4. Adicione o módulo como uma dependência na sua definição de aplicativo

     var myapp = angular.module('MyApp', ['underscore']) 
  5. Para usar, adicione como uma dependência injetada ao seu Controlador / Serviço e ele está pronto para usar

     angular.module('MyApp').controller('MyCtrl', function ($scope, _) { ... //Use underscore _.each(...); ... 

Eu uso isso:

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

Veja https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection até a metade para mais informações sobre a run .

Você também pode dar uma olhada neste módulo para angular

https://github.com/floydsoft/angular-underscore

Se você não se incomodar em usar o lodash, experimente https://github.com/rockabox/ng-lodash, ele encerra o lodash completamente, por isso é a única dependência e você não precisa carregar nenhum outro arquivo de script, como o lodash.

O Lodash está completamente fora do escopo da janela e não “espera” que ele tenha sido carregado antes do seu módulo.

você pode usar este módulo -> https://github.com/jiahut/ng.lodash

isto é para lodash assim underscore