angular中的service服务方法很多地方都会可以用到,内部其实也是依赖angularjs强大的依赖注入能力。
我们先看昨天文章模块创建使用的案例:
angular.module
1 | // 创建myModule模块 |
service
关于angular模块的创建,我们上一篇文章已经讲过,我们就看下模块的service方法,在新建模块后这个模块
实例就拥有了service函数。
1 | var invokeQueue = []; |
那么我们就可以知道在调用service的方法其实就是把$provide,service,还有参数(这边就是arguments)放入invokeQueue中,
从名字看出来这是个调用队列,那就有个疑问了,这个invokeQueue是干啥的呢? 什么时候会调用这个invokeQueue呢?
那就是createInjector函数中的loadModules函数。
loadModules
loadModules函数会在createInjector的时候去调用,看看它对service起的作用
1 | function createInjector(modulesToLoad){ |
我们看到关键一句代码1
2
3
4
5
6
7
8
9
10
11
12
传入我们创建service时push进去的数组元素,最关键的就是这两句代码.
```js
function runInvokeQueue(){
provider = providerInjector.get(invokeArgs[0]);
//调用provider中的方法
//比如injectorProvider 调用invoke方法 传入函数
//函数的参数可以注入
provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
}
invokeArgs[0]就是$provide,invokeArgs[1]就是service,那么实际调用的就是$provide.service函数,参数就是['myService', function() {
this.my = 0;
}]
,关于$provide.service函数我们下篇文章再分析。