Javascript angularjs、browserify和#x2B;强调

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',

我的angularjs应用程序上有如下类似的东西,它与browserify+gulp一起工作

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)这告诉下划线不要将自身固定为全局变量。如果您正在使用,或者您所在的项目使用或至少定义了
定义
函数,下划线将使用该函数将自身作为模块加载到您的应用程序中,因此在
窗口
上不可用。您可以在源文件的底部检出它: