定义控制器的最简洁方式是每个文件 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>