Как сделать работу 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>
в <header>
до angular
. Как я могу заставить его работать?
Ответы
Ответ 1
Я предпочитаю вводить '_' глобально и инъективно для тестов, см. мой ответ на этот вопрос
Использовать подчеркивание внутри контроллеров
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._;
});
Ответ 2
Я просто хотел добавить некоторые пояснения к ответам @beret и @wires. Они определенно помогли и получили от этого сумасшествие, но приведение всего процесса в порядок могло кому-то подойти. Вот как я настроил среду angular с помощью lodash и получил ее работу с yoman gulp - angular для правильной работы
-
bower install lodash --save
(Это добавляет к беседке и сохраняет значение bower json)
-
изменить bower json для загрузки lodash до angular. (Это помогает, если вы используете gulp и не хотите вручную помещать его в index.html, иначе поместите его в index.html перед ссылкой angular)
-
Сделайте новую константу в направлении @wires.
'use strict';
angular.module('stackSample')
// lodash support
.constant('_', window._);
- Внедрение в любой сервис angular, фильтр или контроллер, как и вы:
.filter('coffeeFilter', ['_', function(_) {...}]);
- Чтобы передать его в некоторый вид angular html, просто вставьте его в контроллер и назначьте ему переменную области видимости:
.controller('SnesController', function ($scope, _) {
$scope._ = _;
})
Надеюсь, это поможет кому-то создать свой сайт.:)
Ответ 3
ng-repeat
требуется выражение Angular, которое имеет доступ к переменным области видимости Angular. Поэтому вместо назначения _
в this
назначьте его объекту $scope
, который вы вводите в контроллер:
IndexModule.controller('GridController', function ($scope) {
$scope._ = _;
})
Демо
Ответ 4
Я не уверен, какую версию 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>