我正在使用MEAN堆栈。我想了解如何最好利用Node。我开始通过require.js进行一些异步JS库加载,但在创建使用d3.js的指令时遇到了Angular承诺。
与NodeJS异步加载JS库/框架的最佳实践是什么?当您在MEAN堆栈中使用AngularJS时,这些实践是否会发生变化?
lobrow如何影响这样的事情?有一个d3.js npm包,但我该如何使用呢?
在Angular中使用require.js是不是很糟糕?通过使用require.js,我是否错过了使用promises时带来的一些额外好处?
我开始玩一个名为d3.js的Collision 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还是承诺?