Используйте подчеркивание внутри угловых контроллеров

Как использовать библиотеку подчеркивания внутри контроллеров angularjs?

На этом посте: AngularJS limitTo по последним 2 записям кто-то предложил назначить переменную _ для rootScope, чтобы библиотека была доступна для всех областей в приложении.

Но мне не понятно, где это сделать. Я имею в виду, это должно идти на декларации модуля приложения? то есть:

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

Но тогда где я могу загрузить подчеркивание lib? У меня просто есть на моей странице указателя директива ng-app и ссылка на скрипт как angular-js, так и libs подчеркивания?

index.html:

<head>
</head>
<body ng-app="offersApp">
...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="scripts/vendor/angular.js"></script>
<script src="scripts/vendor/underscore.js"></script>
...  

Как мне этого добиться?

6 ответов

Решение

Когда вы включаете Underscore, он присоединяется к window объект, и так доступен во всем мире.

Таким образом, вы можете использовать его из Angular-кода как есть.

Вы также можете обернуть его в сервис или на заводе, если хотите, чтобы его вводили:

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

И тогда вы можете попросить _ в модуле вашего приложения:

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

Я реализовал предложение @satchmorun здесь: https://github.com/andresesfm/angular-underscore-module

Чтобы использовать это:

  1. Убедитесь, что вы включили underscore.js в свой проект

    <script src="bower_components/underscore/underscore.js">
    
  2. Возьми:

    bower install angular-underscore-module
    
  3. Добавьте angular-underscore-module.js в ваш основной файл (index.html)

    <script src="bower_components/angular-underscore-module/angular-underscore-module.js"></script>
    
  4. Добавьте модуль в качестве зависимости в определении вашего приложения

    var myapp = angular.module('MyApp', ['underscore'])
    
  5. Чтобы использовать, добавьте в качестве введенной зависимости ваш контроллер / сервис, и он готов к использованию

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

Я использую это:

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

См. https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection примерно на полпути для получения дополнительной информации о run,

Вы также можете взглянуть на этот модуль для угловых

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

Если вы не возражаете против использования lodash, попробуйте https://github.com/rockabox/ng-lodash он полностью обернет lodash, так что это единственная зависимость, и вам не нужно загружать любые другие файлы сценариев, такие как lodash.

Lodash полностью выходит за рамки окна и не "надеется", что он был загружен до вашего модуля.

Вы можете использовать этот модуль -> https://github.com/jiahut/ng.lodash

это для lodash так же underscore

Другие вопросы по тегам