在角度控制器中使用下划线

2022-08-30 04:42:22

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

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

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

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

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

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>
...  

如何实现此目的?


答案 1

包含下划线时,它会将自身附加到对象,因此可全局使用。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
});

答案 2

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

要使用它:

  1. 确保在项目中包含下划线.js

    <script src="bower_components/underscore/underscore.js">
    
  2. 获取它:

    bower install angular-underscore-module
    
  3. 将角度下划线模块.js添加到主文件(索引.html)

    <script src="bower_components/angular-underscore-module/angular-underscore-module.js"></script>
    
  4. 将模块作为依赖项添加到应用定义中

    var myapp = angular.module('MyApp', ['underscore'])
    
  5. 若要使用,请添加为注入的依赖项到控制器/服务,它已准备就绪,可以使用

    angular.module('MyApp').controller('MyCtrl', function ($scope, _) {
    ...
    //Use underscore
    _.each(...);
    ...