Как заставить 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. Как я могу заставить его работать?
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