1.背景介绍
ANGULARJS模块加载
AngularJS模块可以在被加载和执行之前对其自身进行配置。我们可以在应用的加载阶段应用不同的逻辑组对其修改,在模块加载阶段,AngularJS会在提供者(provide)注册和配置的过程中对模块进行配置。在整个AngularJS的工作流中,这个阶段是唯一能够在应用启动前对其进行修改的部分。
AngularJS的工作流包括了 配置块(config) 和 运行块(run) 并且在编译期间会执行它们
2.知识剖析
2.1、配置(config)
通过config方法实现对模块的配置,AngularJS中的服务多数都对应一个provider, 用来执行与对应服务相同的功能或对其配置,比如
l
o
g
、
log、
log、http、
l
o
c
a
t
i
o
n
都
是
内
置
服
务
,
相
对
应
的
“
p
r
o
v
i
d
e
r
”
分
别
是
location都是内置服务, 相对应的“provider”分别是
location都是内置服务,相对应的“provider”分别是logProvider、
h
t
t
p
P
r
o
v
i
d
e
r
、
httpProvider、
httpProvider、locationPorvider。
//新建了一个模板:这个模板中有一个服务,一个自定义指令
var app = angular.module(“myApp”, []);
app.fatory(‘myFactory’, function () {
//利用工厂生产 创建一个 服务
var service = {};
return service;
});
app.directive(‘myDirectiive’, function () {
//创建 一个 自定义指令
return {
template: ‘
}
});
// angularJS编译的流程是这样的:
var app = angular.module('myApp', []);
app.config(function ($provide, $compileProvider) {
$provide.factory('myFactory', function () {
var service = {};
return service;
});
$compileProvider.directive('myDiretive', function () {
return {
template: '<div><button>click me</button></div>'
}
});
});
// PS:angularJS会根据你定义的函数顺序来执行他们
2.2、运行块(run)
和配置块不同,运行块在注入器创建之后被执行,它是所有AngularJS应用中第一个被执行的方法。
运行块是AngularJS中与main方法最接近的概念。运行块中的代码块通常很难进行单元测试,它是和应用本身高度耦合的。
运行块通常用来注册全局的事件监听器。例如,我们会在.run()块中设置路由事件的监听器以及过滤未经授权的请求。
调用方式1: 服务也是以模块形式存在的,对外提供特定功能,将服务做为依赖注入进去的,然后再进行调用, 调用方式2: 直接运行相应的服务模块, AngularJS提供了run方法来实现。
run方法还是最先执行的,利用这个特点我们可以将一些需要优先执行的功能通过run方法来运行。
假设我们需要在每次路由发生变化时,都执行一个函数来验证用户的权限,放置这个功能唯一合理的地方就是run方法:
3.常见问题
如何通过 config 配置一个路由模块?
4.解决方案
下面实例使用的是第三方ui-router
5.扩展思考
provider是个啥?
p
r
o
v
i
d
e
服
务
负
责
告
诉
A
n
g
u
l
a
r
如
何
创
造
一
个
新
的
可
注
入
的
东
西
:
即
服
务
。
服
务
会
被
叫
做
供
应
商
的
东
西
来
定
义
,
你
可
以
使
用
provide服务负责告诉Angular如何创造一个新的可注入的东西:即服务。服务会被叫做供应商的东西来定义,你可以使用
provide服务负责告诉Angular如何创造一个新的可注入的东西:即服务。服务会被叫做供应商的东西来定义,你可以使用provide来创建一个供应商。你需要使用
p
r
o
v
i
d
e
中
的
p
r
o
v
i
d
e
r
(
)
方
法
来
定
义
一
个
供
应
商
,
同
时
你
也
可
以
通
过
要
求
provide中的provider()方法来定义一个供应商,同时你也可以通过要求
provide中的provider()方法来定义一个供应商,同时你也可以通过要求provide被注入到一个应用的config函数中来获得$provide服务。
6.参考文献
参考一:angular权威指南
参考二:AngularJS ui-router配置
7.更多讨论
Q1: angularjs中config和run的区别?
答:执行顺序不同,注入服务类型不同
Q2:什么样的东西能够被注入到config里面呢?
答:provider(提供者)、constant(常量)
Q3:既然factorry和value能够节省那么多的代码,为什么还有人要使用provider?
答:Providers 是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider。
作者:liwenrou
来源:CSDN
原文:https://blog.csdn.net/liwenrou/article/details/80740787