1.依賴注入
依賴注入作為控制反轉(zhuǎn)的一種實(shí)現(xiàn)馏段。所有的DI實(shí)現(xiàn)都需要兩個(gè)關(guān)鍵環(huán)節(jié)。
1.注冊(cè)機(jī)制(向容器中注冊(cè)服務(wù))
2.注入并使用(使用的時(shí)候如何申明)
2.angular運(yùn)行環(huán)境體系
<html>
<script src='angular.js'></script>
<script>
var app = angular.module("myApp",[ui-router]);
app.directive('aDirective',function(){})//注入指令
app.controller(firstController,function($scope){})//注入控制器
app.config();//可以注入provider constant溉瓶,修改全局模版,提供元provider
app.run();//可以注入provider factory service value constant 保存全局變量舆逃,使用config中的元provider
app.factory();//注冊(cè)服務(wù)
app.filter();//注冊(cè)過濾器
app.provider('service1',function(){})//注冊(cè)服務(wù)
</script>
<div ng-app="myApp" ng-controller="firstController"></div>
</html>
因此可以看到,依賴注入可以在任何時(shí)候進(jìn)行。只要注冊(cè)了服務(wù)即可鸵赫。
3.注冊(cè)機(jī)制
通過五個(gè)組件進(jìn)行注冊(cè)。
1.value(app.value 在controller回調(diào)中使用)
2.factory(app.factory(a,function(){}) 在service和controller回調(diào)中使用)
3.service(app.service(a,function(){})可以注入factory或者provider中注冊(cè)的服務(wù))
4.provider(app.conf($provider){$provider.provide(a,function(){})})app.provider 在config中注入$provider躏升,使用$provider.provider注冊(cè)
5.constant(app.constant(a,'1'))
4.注入并使用
注入的方式主要有三種:
1.數(shù)組方式:myApp.controller('a',[$a,$b,function(){$a,$b}]));
2.$inject:myApp.controller(a,function($a,$b){}) controller.inject=['$a','$b'];
3.隱式:myApp.controller(a,function($a,$b){})
5.總結(jié)
依賴注入的注冊(cè)主要通過兩種形式辩棒。
1.直接通過全局模塊,注冊(cè) app.facotry app.service app.value app.constant膨疏。這種方式使用簡(jiǎn)單一睁,但是在config之后加載,并且不能配置佃却。
2.通過app.provider(A)+config($Aprovider),在config中使用$Aprovider.service 注冊(cè)并修改服務(wù)方式者吁。
6.源碼
主要通過Function.prototype.toString方法實(shí)現(xiàn)。通過apply執(zhí)行饲帅。
代碼見github https://github.com/etoah/Eg/blob/master/Angular/di.html