コントローラーを定義する最もクリーンな方法は、ファイルごとに 1 つです。各ファイルは、即時起動関数式 (IIFE) またはグローバル スコープを汚染することなく独自のローカル変数を持つことができるクロージャーでラップする必要があります。これが私のプロジェクトでのアプローチです。
my-app.js - プライマリ モジュール定義ファイル - このファイルの主な目的は、アプリケーション モジュールとその依存関係を定義し、ルーティングを定義し (ルーティングが使用されている場合)、プロバイダーを構成することです。最も単純な形式では、次のようになります。
(function (angular) {
angular.module('myApp', ['myApp.someFeature']);
}(angular));
some-feature/some-feature.js - 機能モジュール定義ファイル - このファイルは、機能のモジュールと、この機能が必要とする依存関係を定義します。これは、機能だけでなく、任意の論理グループにすることができます。これにより、必要に応じて機能を別のモジュールまたはアプリケーションに簡単に組み込むことができます。
(function (angular) {
angular.module('myApp.someFeature', []);
}(angular));
some-feature/some-feature-controller.js - 機能に必要なコントローラー - 機能に複数のコントローラーが含まれている場合は、よりわかりやすい名前が必要ですが、この機能には 1 つのコントローラーしか必要ないと仮定します。
(function (angular) {
function SomeFeatureController($scope) {
...
}
angular
.module('myApp.someFeature')
.controller('SomeFeatureController', SomeFeatureController);
}(angular));
index.html - ページの html ファイル - かなり自明です
<html ng-app="myApp">
<head>
<title>My Angular App</title>
<!-- Note: Angular and jQuery (if used) go in head so they delay view loading -->
<script type="text/javascript" language="javascript" src="angular.js"></script>
</head>
<body ng-controller="SomeFeatureController">
Content here....
<!-- Note application files go at the end of the body so they do not delay view loading -->
<script type="text/javascript language="javascript src="my-app.js">
<script type="text/javascript language="javascript src="some-feature/some-feature.js">
<script type="text/javascript language="javascript src="some-feature/some-feature-controller.js">
</body>
</html>