Page 314 - AngularJS权威教程
P. 314
294 第 21 章 架构
这个完整的应用程序被分解为两个分离的模块并且包含有限的功能,重点是粘合应用程序的
不同部分。在这个案例中,我们有包含大多数逻辑的“home”界面和“login”界面。
以这种方式编写应用程序的好处是,我们可以在逻辑中分解函数的类型。你可以集中于为应
用程序的每个组成部分提供一个个功能。还可以为我们编写的部分编写测试,从而分解测试。此
外,还可以延迟加载应用程序的不同部分,因此可以为屏幕中最常见的界面提供最快的应用程序
体验。
此外,这样做还有一个好处:一次编写模块就可跨应用程序共享它们。就是说,如果你的应
用程序背后使用类似的登录系统,你也可以将这个应用程序的登录部分以及相关测试简单地复
制、粘贴到另一个应用程序中。
在我们的产品应用程序中,我们使用这个方法编写模块化代码并且强烈推荐它。
2. 功能的模块化
要将我们的应用模块化,最显而易见的方式是按照模块功能划分。
我们需要把这些模块注入为主应用的依赖项,这样一来,为每个模块类型建立测试都非常容
易,并且隔离和细分了功能,我们需要在编写细则时对这些功能作出解释。
比如,我们可以为每种Angular对象类型创建一个模块:
angular.module('myApp.directives', []);
angular.module('myApp.services', []);
angular.module('myApp.filters', []);
// 我们经常在控制器中使用服务,
// 所以,我们会把它们
// 注入到'myApp.controllers'模块中
angular.module('myApp.controllers', [
'myApp.services'
]);
angular.module('myApp', [
'myApp.directives',
'myApp.controllers',
'myApp.filters',
'myApp.services'
]);
使用这种方法的一个问题是,它有时会给我们留下一堆小模块。这一结果不会影响性能,但
会让开发变得繁琐。
21.3 控制器
当命名控制器时,惯例是使用控制器的名称,用大写字母开始,再加Controller。例如:
angular.module('myApp', [])
.controller('someController', function($scope) {
// 一般不这么写
})
.controller('SomeController', function($scope) {
// 这是控制器通常的写法
})