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



Я пытаюсь использовать lodash использовать его в 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> at <header> до angular. Как я могу заставить его работать?

537   4  

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 и @wires. Они определенно помогли и получили суть этого, но получение всего процесса в порядке может подойти кому-то. Вот как я настроил свою угловую среду с lodash и заставил ее работать с yeoman gulp-angular, чтобы правильно служить

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

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

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

'use strict';

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

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

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

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

демо

Я не уверен, какую версию вы используете угловые. Похоже, вы должны были просто использовать синтаксис 'Controller as' при использовании '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>

Comments

    Ничего не найдено.