如何让lodash与Angular JS一起使用?

时间:2014-05-26 03:01:48

标签: javascript angularjs lodash

我尝试使用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 之前加入了{strong> {{1}} 。我怎样才能使它发挥作用?

4 个答案:

答案 0 :(得分:109)

我更喜欢在全球范围内引入'_'并注入测试,请参阅我对这个问题的回答 Use underscore inside controllers

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

答案 1 :(得分:56)

我只是想对@beret和@ wire的回答添加一些说明。他们肯定帮助并得到了它的主旨,但整个过程的顺序可能适合某人。这就是我用lodash建立我的角度环境的方法,并让它与yeoman gulp-angular合作以正常使用

  • bower install lodash --save(这增加了凉亭和保存给凉亭json)

  • 修改bower json以在角度之前加载lodash。 (这有助于你使用gulp注入并且不想手动将其放入index.html。否则在角度链接之前将其放入index.html)

  • 按@ wire的方向创建一个新常量。

'use strict';

angular.module('stackSample')
  // lodash support
  .constant('_', window._);
  • 像其他任何方式一样注入任何角度服务,过滤器或控制器:
.filter('coffeeFilter', ['_', function(_) {...}]);
  • 将它放入某个角度html视图中,只需将其注入控制器并为其分配范围变量:
.controller('SnesController', function ($scope, _) {
  $scope._ = _;
})

希望这有助于某人建立自己的网站。 :)

答案 2 :(得分:29)

ng-repeat需要一个Angular表达式,它可以访问Angular范围变量。因此,将_分配给this,将其分配给注入控制器的$scope对象:

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

Demo

答案 3 :(得分:2)

我不确定您使用的是什么版本的Angular。看起来你应该刚刚使用&#39;控制器作为&#39;使用&#39;这个&#39;访问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>