如何使用下划线库angularjs控制器内部?
在这个帖子: AngularJS limitTo由过去的2条有人建议到_变量分配到rootScope使该库将提供给应用程序内的所有范围。
但我不清楚的地方去做。 我的意思是它应该去上的应用程序模块声明? 即:
var myapp = angular.module('offersApp', [])
.config(['$rootScope', function($rootScope) { }
但后来我在哪里加载强调的lib? 我有我的索引页面上NG-程序指令和脚本参照这两个角的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>
...
如何实现这一目标?
当你有下划线,它自身附加到window
对象,所以是全球范围内提供。
因此,作为 - 是你可以用它从角码。
你也可以把它包装起来的服务或工厂,如果你想它被注入:
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
});
我已经实现@ satchmorun的建议在这里: https://github.com/andresesfm/angular-underscore-module
要使用它:
请确保你已经包括underscore.js在您的项目
<script src="bower_components/underscore/underscore.js">
得到它:
bower install angular-underscore-module
添加角下划线module.js到主文件(的index.html)
<script src="bower_components/angular-underscore-module/angular-underscore-module.js"></script>
添加模块依赖于你的应用程序定义
var myapp = angular.module('MyApp', ['underscore'])
要使用,添加为依赖注入到控制器/服务,并准备使用
angular.module('MyApp').controller('MyCtrl', function ($scope, _) { ... //Use underscore _.each(...); ...
我用这个:
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._;
});
见https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection大约一半对一些更多的信息run
。
您也可以看看这个模块的角
https://github.com/floydsoft/angular-underscore
如果你不介意使用lodash尝试https://github.com/rockabox/ng-lodash它包装lodash彻底所以它是唯一的依赖,你不需要加载任何其它脚本文件lodash等。
Lodash是完全关闭的窗口范围,并没有“希望”,它一直在你的模块之前加载。
你可以使用这个模块- > https://github.com/jiahut/ng.lodash
这是lodash
所以没有underscore