由于一個(gè)大型的AngularJS應(yīng)用有較多組成部分,所以最好通過分層的目錄結(jié)構(gòu)來組織。 有兩個(gè)主流的組織方式:
這種方式的目錄結(jié)構(gòu)看起來如下:
.
├── app
│?? ├── app.js
│?? ├── controllers
│?? │?? ├── page1
│?? │?? │?? ├── FirstCtrl.js
│?? │?? │?? └── SecondCtrl.js
│?? │?? └── page2
│?? │?? └── ThirdCtrl.js
│?? ├── directives
│?? │?? ├── page1
│?? │?? │?? └── directive1.js
│?? │?? └── page2
│?? │?? ├── directive2.js
│?? │?? └── directive3.js
│?? ├── filters
│?? │?? ├── page1
│?? │?? └── page2
│?? └── services
│?? ├── CommonService.js
│?? ├── cache
│?? │?? ├── Cache1.js
│?? │?? └── Cache2.js
│?? └── models
│?? ├── Model1.js
│?? └── Model2.js
├── lib
└── test
如下:
.
├── app
│?? ├── app.js
│?? ├── common
│?? │?? ├── controllers
│?? │?? ├── directives
│?? │?? ├── filters
│?? │?? └── services
│?? ├── page1
│?? │?? ├── controllers
│?? │?? │?? ├── FirstCtrl.js
│?? │?? │?? └── SecondCtrl.js
│?? │?? ├── directives
│?? │?? │?? └── directive1.js
│?? │?? ├── filters
│?? │?? │?? ├── filter1.js
│?? │?? │?? └── filter2.js
│?? │?? └── services
│?? │?? ├── service1.js
│?? │?? └── service2.js
│?? └── page2
│?? ├── controllers
│?? │?? └── ThirdCtrl.js
│?? ├── directives
│?? │?? ├── directive2.js
│?? │?? └── directive3.js
│?? ├── filters
│?? │?? └── filter3.js
│?? └── services
│?? └── service3.js
├── lib
└── test
app
├── app.js
└── my-complex-module
? ?├── controllers
? ?├── directives
? ?├── filters
? ?└── services
在創(chuàng)建指令時(shí),合適的做法是將相關(guān)的文件放到同一目錄下 (如:模板文件, CSS/SASS 文件, JavaScript文件)。如果你在整個(gè)項(xiàng)目周期都選擇這種組織方式,
app
└── directives
├── directive1
│?? ├── directive1.html
│?? ├── directive1.js
│?? └── directive1.sass
└── directive2
├── directive2.html
├── directive2.js
└── directive2.sass
那么,上述的兩種目錄結(jié)構(gòu)均能適用。
ng-boilerplate 采用了兩種目錄結(jié)構(gòu)的一種更加輕量的方式。在這里,組件的單元測(cè)試與組件放置在同一目錄下。在這種方式下,當(dāng)改變組件時(shí),更加容易找到對(duì)應(yīng)的測(cè)試以及相關(guān)文檔和用例。
services
├── cache
│?? ├── cache1.js
│?? └── cache1.spec.js
└── models
├── model1.js
└── model1.spec.js
app.js
文件包含路由定義、配置和啟動(dòng)說明(如果需要的話)本人更傾向于第一種組織方式,因?yàn)楦子诓檎医M件。