126

如何在 angularjs 控制器中使用下划线库?

在这篇文章中:AngularJS limitTo by last 2 records 有人建议将 _ 变量分配给 rootScope,以便该库可用于应用程序内的所有范围。

但我不清楚在哪里做。我的意思是它应该继续应用程序模块声明吗?IE:

var myapp = angular.module('offersApp', [])
            .config(['$rootScope', function($rootScope) { }

但是我在哪里加载下划线库?我的索引页面上只有 ng-app 指令和对 angular-js 和下划线库的脚本引用?

index.html

<head>
</head>
<body ng-app="offersApp">
...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="scripts/vendor/angular.js"></script>
<script src="scripts/vendor/underscore.js"></script>
...  

我如何实现这一目标?

4

6 回答 6

231

当您包含下划线时,它会将自己附加到window对象,因此全局可用。

因此,您可以按原样从 Angular 代码中使用它。

如果您希望注入它,您也可以将其包装在服务或工厂中:

var underscore = angular.module('underscore', []);
underscore.factory('_', ['$window', function($window) {
  return $window._; // assumes underscore has already been loaded on the page
}]);

_然后你可以在你的应用模块中询问:

// Declare it as a dependency of your module
var app = angular.module('app', ['underscore']);

// And then inject it where you need it
app.controller('Ctrl', function($scope, _) {
  // do stuff
});
于 2013-02-19T22:33:22.850 回答
34

我在这里实现了@satchmorun 的建议: https ://github.com/andresesfm/angular-underscore-module

要使用它:

  1. 确保在项目中包含 underscore.js

    <script src="bower_components/underscore/underscore.js">
    
  2. 得到它:

    bower install angular-underscore-module
    
  3. 将 angular-underscore-module.js 添加到您的主文件 (index.html)

    <script src="bower_components/angular-underscore-module/angular-underscore-module.js"></script>
    
  4. 在您的 App 定义中添加模块作为依赖项

    var myapp = angular.module('MyApp', ['underscore'])
    
  5. 要使用,请将作为注入依赖项添加到您的 Controller/Service 中,即可使用

    angular.module('MyApp').controller('MyCtrl', function ($scope, _) {
    ...
    //Use underscore
    _.each(...);
    ...
    
于 2013-11-06T18:52:38.783 回答
31

我用这个:

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

有关. _ _run

于 2014-06-01T21:29:27.010 回答
3

你也可以看看这个模块的角度

https://github.com/floydsoft/angular-underscore

于 2013-10-16T04:52:57.617 回答
1

如果您不介意使用 lodash,请尝试https://github.com/rockabox/ng-lodash它完全包装了 lodash,因此它是唯一的依赖项,您不需要加载任何其他脚本文件,例如 lodash。

Lodash 完全超出了窗口范围,并且没有“希望”它在您的模块之前被加载。

于 2014-07-02T19:45:43.407 回答
-2

你可以使用这个模块-> https://github.com/jiahut/ng.lodash

这是lodash为了underscore

于 2015-04-18T04:24:11.140 回答