如何模块化AngularJS应用程序(文件夹结构)?

时间:2014-07-21 05:22:31

标签: angularjs

假设我将使用3个模块启动新的AngularJs应用程序:

  1. 登录
  2. 付款
  3. 询问
  4. 我想为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']);
    

    只应加载登录信息。我将在这里使用登录参数。

    有什么建议吗?

1 个答案:

答案 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?