howdylikes

Google Developersってわかりづらいよね

AngularJS Module定義のエラー

Uncaught Error: [$injector:nomod] 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.
  • myappがおかしい
  • moduleが見つからない
  • module作成したいなら2つめの引数入れて

的なとこですかね。まぁエラーメッセージからでもわかるのですが勉強がてらちゃんと見てみます

リファレンス

https://code.angularjs.org/1.4.7/docs/api/ng/function/angular.module
requiresはoptionalですがモジュールの作成時は必須のようです
逆を言えば呼び出し時は不要です。
依存モジュールが不要な場合は[]を指定すればOK

ソース

それっぽいチェックはこの辺り
https://github.com/angular/angular.js/blob/v1.4.7/src/loader.js#L92-L97
ensureの3つ目の引数でfunctionを渡してその中でrequiresの有無をチェックしています

https://github.com/angular/angular.js/blob/v1.4.7/src/loader.js#L17-L19
||で繋げているので、obj[name]がtrue(=2回目の呼び出し)であれば3つ目の関数は呼ばれません
そのため呼び出し時はrequiresのチェックが呼ばれないかつ既にあるmoduleを返すわけですね
キャッシュでよく使う書き方ですね

検証

// NG 
var app = angular.module('myapp');
// OK 2つ目はreadのため問題ない
var app = angular.module('myapp', []);
var app2 = angular.module('myapp')

その他

moduleにはngやngLocalが登録されている模様
そこに自前のmoduleが追加されていく形??