AngularJS权威指南-模块加载

《AngularJS 权威教程》读书笔记,第十一章——AngularJS 模块加载。

简介

AngularJS 模块可以在被加载和执行之前对其自身进行配置。

配置

config() 函数语法糖:

1
2
3
4
angular.module('myApp', [])
.config(function($provide){
});

当我们在一个模块上创建一个服务和指令时:

1
2
3
4
5
6
7
8
9
10
angular.module('myApp', [])
.factory('myFactory', function(){
var server = {};
return {};
})
.directive('myDirective', function(){
return {
template: '<button>Click me</button>'
}
});

AngularJS 会在编译时执行这些辅助函数,它们在功能上等同于下面的写法:

1
2
3
4
5
6
7
8
9
10
11
12
angular.module('myApp', [])
.config(function($provide, $compileProvider){
$provide.factory('myFactory', function(){
var service = {};
return service;
});
$compileProvider.directive('myDirective', function(){
return {
template: '<button>Click me</button>'
};
});
});

AngularJS 会以这些函数书写和注册的顺序来执行它们,也就是说我们无法注入一个尚未注册的提供者。

唯一例外的是 constant() 方法,这个方法总会在所有配置块之前被执行。

当对模块进行配置时,需要注意可以注入 config() 函数的只有:提供者(provider() 语法构建的服务)和常量。(如果注入服务,那岂不是要在配置之前就把服务实例化了嘛,跟上面的原则矛盾了)

运行块

和配置块不同,运行块在注入器创建之后被执行,它是所有 AngularJS 应用中第一个被执行的方法,类似 main 方法。
运行块通常用来注册全局的事件监听器。(例如:可以在 run() 块中设置路由事件的监听器以及过滤未经授权的请求)