假设我将使用3个模块启动新的AngularJs应用程序:
我想为payment
添加login
个详细信息enquiry
,我们怎样才能实现这一目标?
我将有一个登录屏幕,它将调用服务器并检查登录,之后该服务器将响应一些参数,我将在支付和查询模块中使用。
如果我使用其他2个模块加载登录模块:
var myModule = angular.module('myApp', ['payment', 'enquiry']);
它将在登录时加载两个模块(我不确定),但我想这样:
var myModule = angular.module('myApp', ['login']);
// i.e for payment:
var myModule = angular.module('payment', ['login']);
// and for enquiry:
var myModule = angular.module('enquiry', ['login']);
只应加载登录信息。我将在这里使用登录参数。
有什么建议吗?
答案 0 :(得分:4)
首先,你不是'#34; loading"具有该语法的模块,仅确保以正确的顺序初始化它们。加载模块是通过将它们包含在index.html页面中完成的(或者使用requirejs或类似的,但这将使它成为一个完全不同的野兽)。
假设您正在构建SPA(单页应用程序),您将只有一个主模块,并且必须直接或间接引用您要使用的所有其他模块。因此,如果您按照自己的方式进行,您将永远无法访问付款或查询。所以你应该这样做:
app.js中的
var myModule = angular.module('myApp', ['payment', 'enquiry']);
in payment.js
var myModule = angular.module('payment', ['login']);
在enquiry.js中
var myModule = angular.module('enquiry', ['login']);
在login.js
中var myModule = angular.module('login', []);
index.html中的
<html ng-app="myApp">
...
<script src="app.js"></script>
<script src="payment.js"></script>
<script src="enquiry.js"></script>
<script src="login.js"></script>
...
</html>
请记住,因为您将在index.html中包含所有这些的JavaScript代码,您将&#34;加载&#34;无论你如何定义模块,所有代码总是只有一个模块&#34;绑定&#34;在您的应用程序中,该模块必须能够访问您所包含的所有其他模块。
如果您想要延迟加载(加载资源(模块,控制器,过滤器,提供程序等),当您需要它们时,这是一个完全不同的野兽,并且在您的应用程序中需要大量额外的代码以及一些使用angularjs的hackish方法,除非你使用了http://marcoslin.github.io/angularAMD/#/home。还有一个很好的讨论,你是否应该在这里使用延迟加载:Does it make sense to use Require.js with Angular.js?