モジュールを宣言する「最善の」方法
angularはグローバルスコープ自体にあり、モジュールは変数に保存されるので、次の方法でモジュールにアクセスできますangular.module('mymod')
。
// one file
// NOTE: the immediately invoked function expression
// is used to exemplify different files and is not required
(function(){
// declaring the module in one file / anonymous function
// (only pass a second parameter THIS ONE TIME as a redecleration creates bugs
// which are very hard to dedect)
angular.module('mymod', []);
})();
// another file and/or another anonymous function
(function(){
// using the function form of use-strict...
"use strict";
// accessing the module in another.
// this can be done by calling angular.module without the []-brackets
angular.module('mymod')
.controller('myctrl', ['dep1', function(dep1){
//..
}])
// appending another service/controller/filter etc to the same module-call inside the same file
.service('myservice', ['dep2', function(dep2){
//...
}]);
// you can of course use angular.module('mymod') here as well
angular.module('mymod').controller('anothermyctrl', ['dep1', function(dep1){
//..
}])
})();
他のグローバル変数は必要ありません。
もちろん、それはすべての好みに依存しますが、これは一種の最良の実践だと思います。
- グローバルスコープを汚染する必要はありません
- どこからでもモジュールにアクセスして、モジュールとその機能を自由に別のファイルに分類できます。
- 「厳密な使用」の関数形式を使用できます。
- ファイルの読み込み順序はそれほど重要ではありません
モジュールとファイルを並べ替えるためのオプション
モジュールを宣言してアクセスするこの方法により、非常に柔軟になります。関数タイプ(別の回答で説明されているような)またはルートを介してモジュールをソートできます。例:
/******** sorting by route **********/
angular.module('home')...
angular.module('another-route')...
angular.module('shared')...
最終的にどのように分類するかは、個人の好みとプロジェクトの規模とタイプの問題です。私は個人的には、モジュールの再利用性を高めるために、すべての異なるテストファイルを含め、同じフォルダー内のモジュールのすべてのファイル(ディレクティブ、コントローラー、サービス、フィルターのサブフォルダーに順序付け)をグループ化するのが好きです。したがって、中規模プロジェクトでは、すべての基本ルートとそのコントローラー、サービス、ディレクティブ、および多かれ少なかれ複雑なサブモジュールを含むベースモジュールができます。 :
/******** modularizing feature-sets **********/
/controllers
/directives
/filters
/services
/my-map-sub-module
/my-map-sub-module/controllers
/my-map-sub-module/services
app.js
...
angular.module('app', [
'app.directives',
'app.filters',
'app.controllers',
'app.services',
'myMapSubModule'
]);
angular.module('myMapSubModule',[
'myMapSubModule.controllers',
'myMapSubModule.services',
// only if they are specific to the module
'myMapSubModule.directives',
'myMapSubModule.filters'
]);
非常に大きなプロジェクトの場合、上記のようにルートによって、またはいくつかの選択されたメインルートによって、またはルートといくつかの選択されたコンポーネントの組み合わせによっても、モジュールをグループ化することがありますが、それは本当に依存します。
編集:
それが関連していて、私が最近非常に最近遭遇したからです:(angular.module-functionに2番目のパラメーターを追加することによって)モジュールを1回だけ作成するように十分注意してください。これはアプリケーションを混乱させ、検出が非常に困難になる可能性があります。
並べ替えモジュールに関する2015年の編集:
1年半の角度体験の後で、AMDはAngularやサービス、ディレクティブ、フィルターではまだうまく機能しないため、アプリ内で別の名前のモジュールを使用することの利点は多少制限されることを付け加えますとにかく、角度のコンテキスト内でグローバルに利用できます(ここで例を示します)。ただし、意味的および構造的なメリットはまだあります。コードを1行コメントアウトまたはコメントアウトして、モジュールを含めたり除外したりできると便利です。
また、通常は互いに依存しているため、サブモジュールをタイプ(例: 'myMapSubModule.controllers')で分離することはほとんど意味がありません。