Use underscore inside Angular controllers Use underscore inside Angular controllers javascript javascript

Use underscore inside Angular controllers


When you include Underscore, it attaches itself to the window object, and so is available globally.

So you can use it from Angular code as-is.

You can also wrap it up in a service or a factory, if you'd like it to be injected:

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

And then you can ask for the _ in your app's module:

// Declare it as a dependency of your modulevar app = angular.module('app', ['underscore']);// And then inject it where you need itapp.controller('Ctrl', function($scope, _) {  // do stuff});


I have implemented @satchmorun's suggestion here:https://github.com/andresesfm/angular-underscore-module

To use it:

  1. Make sure you have included underscore.js in your project

    <script src="bower_components/underscore/underscore.js">
  2. Get it:

    bower install angular-underscore-module
  3. Add angular-underscore-module.js to your main file (index.html)

    <script src="bower_components/angular-underscore-module/angular-underscore-module.js"></script>
  4. Add the module as a dependency in your App definition

    var myapp = angular.module('MyApp', ['underscore'])
  5. To use, add as an injected dependency to your Controller/Service and it is ready to use

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


I use this:

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

See https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection about halfway for some more info on run.