Как заставить 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>