Как заставить lodash работать с Angular JS?

Я пытаюсь использовать Лодаш использовать его в ng-repeat директивы, таким образом:

<div ng-controller="GridController" ng-repeat="n in _.range(5)">
    <div>Hello {{n}}</div>
</div>

бытие GridController:

IndexModule.controller('GridController', function () {

this._ = _

})

Однако не работает и так, ничего не повторяется. Если я изменю директиву на ng-repeat="i in [1,2,3,4,5]" это сработает.

lodash уже включен через <script> в <header> до angular, Как я могу заставить это работать?

4 ответа

Решение

Я предпочитаю вводить '_' глобально и инъекционно для тестов, см. Мой ответ на этот вопрос. Используйте подчеркивание внутри контроллеров.

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

Я просто хотел добавить пояснения к ответам @beret's и @wire. Они определенно помогли и получили суть, но приведение в порядок всего процесса может кого-то устроить. Вот как я настроил свое угловое окружение с помощью lodash и заставил его работать с yeoman gulp-angular для правильной работы

  • bower install lodash --save (Это добавляет к беседе и экономит на беседе JSON)

  • измените bower json так, чтобы он имел нагрузку lodash, прежде чем это сделает угловой. (Это помогает, если вы используете gulp inject и не хотите вручную помещать его в index.html. В противном случае поместите его в index.html перед угловой ссылкой)

  • Создайте новую константу для направления @wire.

'use strict';

angular.module('stackSample')
  // lodash support
  .constant('_', window._);
  • Внедрить в любой угловой сервис, фильтр или контроллер, как если бы вы делали что-либо еще:
.filter('coffeeFilter', ['_', function(_) {...}]);
  • Чтобы добавить его в какой-то угловой вид HTML, просто вставьте его в контроллер и назначьте ему переменную области видимости:
.controller('SnesController', function ($scope, _) {
  $scope._ = _;
})

Надеюсь, это поможет кому-то настроить свой сайт.:)

ng-repeat требуется выражение Angular, которое имеет доступ к переменным области видимости Angular. Так что вместо назначения _ в this, назначьте его $scope объект, который вы вводите в контроллер:

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

демонстрация

Я не уверен, какую версию Angular вы используете. Похоже, вы должны были использовать синтаксис "Контроллер как", когда используете "this" для доступа к переменным в dom.

Вот решение с этим и не используя область. 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>
Другие вопросы по тегам