MEAN异步JS加载 - require.js还是promises?

时间:2014-10-16 23:59:33

标签: javascript node.js angularjs d3.js mean-stack

问题

我正在使用MEAN堆栈。我想了解如何最好利用Node。我开始通过require.js进行一些异步JS库加载,但在创建使用d3.js的指令时遇到了Angular承诺。

与NodeJS异步加载JS库/框架的最佳实践是什么?当您在MEAN堆栈中使用AngularJS时,这些实践是否会发生变化?

lobrow如何影响这样的事情?有一个d3.js npm包,但我该如何使用呢?

在Angular中使用require.js是不是很糟糕?通过使用require.js,我是否错过了使用promises时带来的一些额外好处?

代码示例

我开始玩一个名为d3.jsCollision Detection示例。

我的初始控制器代码是这样的......

angular.module('core').controller('HomeController', ['$scope',
  function($scope) {

    $scope.init = function() {
      // d3.js stuff
    }

    require.config({paths: {d3: "http://d3js.org/d3.v3.min"}});
    require(["d3"], function(d3) {
      $scope.init();
    });

  }
]);

它工作正常,但我开始this tutorial(如何制作一个利用d3.js的指令),它让我想起了许诺。这就是它加载d3.js库的方式。

  

"为了实际使用我们的d3库,我们需要将它包含在页面上。我们可以通过在工厂中复制并粘贴d3代码来实现这一点(如上所示),或者您可以在工厂的页面上注入它。"

我想我会学到一些东西,即使它有效,所以我的控制器最终看起来像这样......

angular.module('core').controller('HomeController', ['$scope', 'D3',
  function($scope, D3) {

    $scope.init = function() {
      // d3.js stuff
    }

    D3.load().then(function(d3) {
      $scope.init();
    });
  }
]);

有了这家工厂。

angular.module('core').factory('D3', ['$q',
  function($q) {

    return {
      load: function() {
        var promise = $q.defer();
        require.config({paths: {d3: "http://d3js.org/d3.v3.min"}});
        require(["d3"], function(d3) {
          return promise.resolve(d3);
        });
      },
      test: 'worked'
    };

  }
]);

如果该承诺语法不正确,或者我已经错误地复制了某些内容,那就没问题了。 Require.js还是承诺?

0 个答案:

没有答案