将非Angular JS库注入

3
在我们的项目中,我们使用NPM和Browserify进行第三方依赖管理,这与AngularJS(感谢CommonJS模块)结合使用效果很好。
以下代码显示了依赖关系结构,这与angular的依赖注入非常契合:
(function () {
    'use strict';

    var moment = require('moment');
    var lodash = require('lodash');

    var angular = require('angular');

    var app = angular.module('myProject', [
        require('angular-ui-router'),
        require('angular-animate'),
        require('angular-resource'),
        require('angular-ui-bootstrap'),
        require('ng-file-upload'),
        require('angular-smart-table'),
    ]);

    app.constant('moment',moment);
    app.constant('lodash',lodash);

})();

我的问题是关于像moment或lodash这样的纯JavaScript库。最好的方式是将它们注入到我的控制器和指令中吗?使用app.constant()方法是否可行,还是有我没有考虑到的缺点?
我意识到周围有很多针对这些库的“angular-mapper”项目,但我不希望它们得到足够长时间的支持,因此我宁愿坚持使用原始库。

1
我会使用“value”而不是“constant”,但是通常这是最好的方法,除非您想要额外的功能(特定于Angular的修改),在这种情况下,我会将其放入服务或工厂中。 - casraf
1个回答

2
您的问题的评论指向了正确的方向 - 首先寻找那些已被Angular化的库的表单。如果没有,那么您可以像这样做 -
var lodash = angular.module('lodash', []);
lodash.factory('_', function() {
  return window._;
});

然后在您的控制器和服务中使用此模块依赖项并注入“_”。

即使使用app.constant,它仍然可以作为依赖项“注入”。我想,“工厂”方式给了您更多的灵活性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接