前置き
Docsによると、
https://docs.angularjs.org/api/ng/function/angular.module
When passed two or more arguments, a new module is created. If passed only one argument, an existing module (the name passed as the first argument to module) is retrieved.
2つ以上の引数が渡された場合、新しいモジュールが作成されます。引数が一つであれば、既存の(その名前の)モジュールが取得されます。
いろいろ試してみる
var app = angular.module('MyApp', ['ngRoute']);
console.log(app.requires); //["ngRoute"]
var app2 = angular.module('MyApp');
console.log(app2.requires); //["ngRoute"] 第二引数を渡さなければ、getterになる。
var app3 = angular.module('MyApp', []);
console.log(app3.requires); //[] 第二引数を渡せば、新しくmoduleが作成される
console.log(app.requires); //["ngRoute"]
console.log(app2.requires); //["ngRoute"] 別に作成されるので、前もって作ってあるものには影響がない
- 第二引数を渡せばmoduleを新規作成する。第二引数を渡さなければ、前に作成したmodule名のものを取得。
- まさしくDocsに書いてある通り。
逆バージョン
angular.module('MyApp');
- エラーになった
Module 'MyApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
- 第二引数を渡さなければ、getterとしての役割にしかならないので、すでに作成済みのmoduleがない場合、エラーになる、ということか。
サービス類の登録
var app = angular.module('MyApp', ['ngRoute']);
console.log(app._invokeQueue); //[] //空
var app2 = angular.module('MyApp');
app2.constant('hoge', 1);//app2でconstant登録
console.log(app._invokeQueue[0]); //["$provide", "constant", Arguments[2]]
console.log(app._invokeQueue[0][2][0]); //"hoge" //appでhoge constantが登録されていることが確認できる
その他
var app = angular.module('MyApp', ['ngRoute']);
console.log(app._invokeQueue); //[] //空っぽ
var app2 = angular.module('MyApp', ['ngRoute']);
app2.constant('hoge', 1);//app2でconstant登録
console.log(app._invokeQueue); //[] //appとapp2は別物
まとめ
angular.moduleに第二引数を渡さなければgetterになるので、一々戻り値を変数に確保しておく必要が無い(無駄な変数を作らなくて済む)。また、第二引数の内容が同じでであっても、渡せば新規に作成される。
以上のことから、読み込む順番さえ適切であれば、サービスやディレクティブ単位で別ファイルにすることが容易になる。