Javascript angularjs、browserify和#x2B;强调
我的angularjs应用程序上有如下类似的东西,它与browserify+gulp一起工作Javascript angularjs、browserify和#x2B;强调,javascript,angularjs,browserify,Javascript,Angularjs,Browserify,我的angularjs应用程序上有如下类似的东西,它与browserify+gulp一起工作 require('angular'); require('angular-resource'); require('angular-xeditable'); require('angular-spinner'); var app = angular.module('itembase', [ require('angular-ui-router'), 'ngResource',
require('angular');
require('angular-resource');
require('angular-xeditable');
require('angular-spinner');
var app = angular.module('itembase', [
require('angular-ui-router'),
'ngResource',
'xeditable',
'angularSpinner'
]);
我的问题是如何将下划线库集成到此环境中。我尝试了一些方法,比如,把
require('下划线')代码>以上var\uxAE=require('下划线')代码>,但它似乎不起作用。
这些文件在代码中,但在angularjs应用程序中确实可见。首先,下划线不是角度模块。
解决方案是加载下划线(使用browserfy:require('下划线')
),然后创建一个工厂,返回下划线并使其可注入其他角度组件:
angular.module('itembase')
.factory('_', function($window) {
return $window._;
});
在此之后,您只需将其注入组件中,就像您对任何其他组件所做的那样:
angular.module('itembase')
.controller('MyController', function(_) {
_.each([1,2,3,4], function() {
console.log('using underscore!!!');
});
});
这种方法的美妙之处在于,您的依赖关系与代码完全解耦,并且可以很容易地对其进行测试或更改,而无需稍后重写内容
例如,如果在项目结束时,您意识到仅在数组上使用下划线,则可以像以下那样重新实现工厂:
angular.module('itembase')
.factory('_', function($window) {
return {
each: function(el, fn) {
for(var i = 0; i < el.length; i++) {
fn(el[i], i, el);
}
}
};
});
angular.module('itembase'))
.factory(“”),函数($window){
返回{
每个:功能(el、fn){
对于(变量i=0;i
听起来可行,我会试一试。@gion_13我正在尝试实现这个答案,但在创建工厂时,在第3行,$window.\u无法联系到。还有什么需要做的吗?例如,Browserialized输出文件不是必须添加到某个地方吗?@fred为了使“$window.”可以访问,您需要首先加载下划线(定义窗口。
),然后执行在窗口中找不到的Factory下划线。\我怀疑您使用的是某种js模块加载器(如require.js)这告诉下划线不要将自身固定为全局变量。如果您正在使用,或者您所在的项目使用或至少定义了定义
函数,下划线将使用该函数将自身作为模块加载到您的应用程序中,因此在窗口
上不可用。您可以在源文件的底部检出它: