Dan*_*nze 19 javascript requirejs angularjs
在这个回购中, AngularJS对AMD的RequireJS表示赞赏.
在这个回购中,AngularJS团队为AMD开发了一个不包含RequireJS 的AngularJS项目.
leo*_*eog 27
将RequireJS与AngularJS一起使用是有意义的,但前提是你理解它们如何在依赖注入方面工作,因为虽然它们都注入依赖关系,但它们注入了非常不同的东西.
AngularJS有自己的依赖系统,允许您将AngularJS模块注入新创建的模块,以便重用实现.假设你创建了一个实现AngularJS过滤器"greet"的"第一个"模块:
angular
.module('first', [])
.filter('greet', function() {
return function(name) {
return 'Hello, ' + name + '!';
}
});
Run Code Online (Sandbox Code Playgroud)
现在让我们假设您想在另一个名为"second"的模块中使用"greet"过滤器来实现"再见"过滤器.您可以将"第一"模块注入"第二"模块:
angular
.module('second', ['first'])
.filter('goodbye', function() {
return function(name) {
return 'Good bye, ' + name + '!';
}
});
Run Code Online (Sandbox Code Playgroud)
问题是,为了在没有RequireJS的情况下使其正常工作,您必须确保在创建"第二个"AngularJS模块之前在页面上加载"第一个"AngularJS模块.引用文件:
根据模块的不同,需要在加载需求模块之前加载所需的模块.
从这个意义上讲,这里是RequireJS可以帮助您的地方,因为RequireJS提供了一种向页面注入脚本的简洁方法,可帮助您组织彼此之间的脚本依赖关系.
回到"第一个"和"第二个"AngularJS模块,下面是如何使用RequireJS将不同文件上的模块分开以利用脚本依赖性加载:
// firstModule.js file
define(['angular'], function(angular) {
angular
.module('first', [])
.filter('greet', function() {
return function(name) {
return 'Hello, ' + name + '!';
}
});
});
Run Code Online (Sandbox Code Playgroud)
// secondModule.js file
define(['angular', 'firstModule'], function(angular) {
angular
.module('second', ['first'])
.filter('goodbye', function() {
return function(name) {
return 'Good bye, ' + name + '!';
}
});
});
Run Code Online (Sandbox Code Playgroud)
你可以看到我们依赖于"firstModule"文件在可以执行RequireJS回调的内容之前注入,需要加载"第一个"AngularJS模块来创建"第二个"AngularJS模块.
附注:为了在RequireJS回调函数中使用AngularJS,需要在"firstModule"和"secondModule"文件上注入"angular"作为依赖项,并且必须在RequireJS config上配置它以将"angular"映射到库代码.你也可以用传统的方式将AngularJS加载到页面(脚本标记),尽管会损害RequireJS的好处.
有关在我的博客文章中从2.0版本获得AngularJS核心的RequireJS支持的更多细节.
基于我的博客文章"用AngularJS理解RequireJS",这里是链接.
Nic*_*ner 20
是的,你可以使用带棱角的RequireJS.您需要做一些额外的工作才能使其正常运行,如您所包含的链接,但它是可能的.
但总的来说,我还没有发现AMD对Angular有任何需求.AMD的整个想法是,它允许您以声明方式指定脚本之间的依赖关系,而不必担心将它们包含在页面中的顺序.但是,Angular通过其依赖注入机制为您解决了这个问题,因此在这方面使用AMD并没有真正获得任何好处.
tl; dr我没有找到使用AMD与Angular.js的令人信服的理由.