angularjs,browserify +下划线

时间:2014-10-13 16:56:47

标签: 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',
    'xeditable',
    'angularSpinner'
]);

我的问题是如何将下划线库集成到这个环境中 我尝试了几种方法,将require('underscore');放在var _ = require('underscore');之上,但它似乎不起作用。
这些文件在代码中,但在angularjs app中真的可见。

1 个答案:

答案 0 :(得分:1)

首先,下划线不是角度模块 解决方案是加载下划线(使用browserfy:require('underscore')),然后创建一个返回下划线并使其可注入其他角度组件的工厂:

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