AngularJSのコントローラはグローバル関数としないほうがいいらしい

  • 投稿日:
  • by

Angularの初期のチュートリアルでは、コントローラをグローバル関数として定義する例が載っています。

http://code.angularjs.org/1.0.8/docs/tutorial/step_02

function PhoneListCtrl($scope) {
  ...
}

といった感じで。これを参照してか、さまざまなところでAngularのサンプルコードが、グローバル関数のコントローラを使っています。

どこだか忘れましたが、よくドキュメントを読むと、production時はこれは好ましくないと書いてあります。ちゃんとDependency Injectionを使って依存解決するようにと。

最新のチュートリアルでは、上記コードは廃止されたようです。

http://docs.angularjs.org/tutorial/step_02

angular.module('MyApp', [])
.controller('PhoneListCtrl', function($scope) {
  ...
});

のようにします。これで名前の衝突が起こりません。 おそらく唯一の手間は、MyAppをちゃんと指定しないといけないことです。

<html ng-app="MyApp">

これは、ほとんどのケースで行われるので問題ないでしょう。

例によって、ちゃんと探せばこういう指針を書いたドキュメントもあるのかもしれませんが。ぜひとも正しい方法を広めていきたいものです。