在angularjs中使用节点模块?

时间:2015-04-17 22:08:47

标签: node.js

使用外部代码的最佳做法是什么,例如在节点模块中找到的代码,有角度吗?

我想在我的角应用中使用这个https://www.npmjs.com/package/positionsizingcalculator节点模块。我已经创建了一个用于包装节点模块的角度服务,现在我想让服务使用节点模块。

'use strict';

angular.module('angularcalculator')
  .service('MyService', function () {
    this.calculate = function () {
      return {
        //I want to call the node module here, whats the best practice?
      };
    }
  });

1 个答案:

答案 0 :(得分:5)

要做到这一点,我会打开包装并从中抓取.js。这个包是MIT许可证,所以我们可以做任何我们想做的事情。如果您导航到/node_modules/positionsizingcalculator/,则会找到index.js。打开它,你会看到moudle导出,它带有一个返回一个对象的函数。

您会注意到这是一个与.factory非常相似的模式,它还会返回一个返回对象(或构造函数,取决于您的模式)的函数。所以我要做以下

.factory('positionsizingcalculator', function(){
        basicValidate = function (argument) {
        ... //Insert whole declaration in here
        return position;
}) 

并将其注入您需要的地方:

.controller('AppController', function(positionsizingcalculator){
    //use it here as you would in node after you inject it via require.
})

- 编辑:这对于JS的一次攻击很有用,但是如果你想要一个更具扩展性的解决方案,http://browserify.org/是一个更好的选择。它允许您将需求转换为单个包。请注意,如果您为整个站点制作一个需要的捆绑包,这可能会导致您需要更多的代码,因为这不是真正的AMD,并且您需要加载您可能想要的所有客户端,除非你制作特定于页面的包。

您仍然希望在factory中执行require并将其返回,以将其保留在角度的依赖注入框架中。