[编辑]
我在我的博客上写了一篇文章来更详细地解释事情:
在 sam-dev.net 上阅读它 ,您现在可以阅读第二部分,以及代码示例。
我会回答我自己的问题。不是因为我认为这是最好的方法,而是因为这是我决定采用的方法。
这就是我将业务模块划分为文件夹的方式
- 应用程序
- 业务模块
- 控制器
- index.js
- 第一个Ctrl.js
- 第二个Ctrl.js
- 指令
- 服务
- 意见
- 过滤器
- 另一个业务模块
- 共享
- 应用程序.js
- 索引.html
每个模块都有自己的文件夹结构,用于控制器、指令等......
每个文件夹都有一个 index.js 文件,然后是其他文件来分隔每个控制器、每个指令等......
index.js 文件包含模块的定义。例如上面的 businessModule 的控制器:
angular.module('myCompany.businessModule.controllers', []);
这里没有依赖关系,但可能有任何依赖关系。
然后在 firstCtrl.js 中,我可以重用该模块并将控制器添加到它:
angular.module('myCompany.businessModule.controllers').controller('firstCtrl',
function(){
});
然后 app.js 通过将它们添加到依赖项数组来聚合我想要用于我的应用程序的所有模块。
angular.module('myApp', ['myCompany.businessModule', 'myCompany.anotherBusinessModule']);
共享文件夹包含指令和其他不特定于业务模块并且可以在任何地方重用的东西。
同样,我不知道这是否是最好的方法,但它绝对适合我。也许它可以激励其他人。
编辑
由于 index.js 文件包含模块声明,因此必须在任何其他应用程序脚本之前在 html 页面中引用它们。为此,我使用了 ASP.NET MVC 4 的 IBundleOrderer:
var bundle = new ScriptBundle("~/bundles/app") { Orderer = new AsIsBundleOrderer() };
bundles.Add(bundle.IncludeDirectory("~/app", "*.js", true));
public class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
files = files.OrderBy(x => x.Name == "index.js" ? 0 : 1);
return files;
}
}