什么是依賴注入
AngularJS采用的是模塊化的方式來組織代碼的跟狱,它會(huì)將一些通用邏輯封裝成一個(gè)對(duì)象或者函數(shù),實(shí)現(xiàn)最大程度的復(fù)用据块,這導(dǎo)致了使用者和被使用者之間存在了一些依賴關(guān)系码邻。
所以所謂的依賴注入是指,在運(yùn)行的過程中自動(dòng)查找需要的依賴關(guān)系另假,然后將依賴關(guān)系傳遞給使用者的一種機(jī)制像屋。
例如,造一個(gè)控制器边篮,需要一個(gè)模塊2(模型)己莺,這時(shí)開發(fā)需要向AngularJS申請(qǐng)一個(gè)模塊2奏甫,AngularJS會(huì)根據(jù)使用者申請(qǐng)的模塊,去尋找對(duì)應(yīng)的模塊凌受,然后將找到的模塊傳遞給使用者阵子,這個(gè)過程就叫做依賴注入。
常見的AngularJS內(nèi)置服務(wù)有$http,$location,$timeout,$interval,$rootScope等胜蛉。
推斷式注入
var app = angular.module('app',[]);
app.controller('demoController',function('$scope','$http'){
//邏輯代碼
});
上面這種挠进,直接將函數(shù)參數(shù)當(dāng)成是依賴注入的方式叫做推斷式注入,這種方式看似代碼量很少誊册,但是存在一個(gè)問題领突,當(dāng)代碼進(jìn)行壓縮的時(shí)候,函數(shù)的參數(shù)會(huì)被壓縮成其他名字的變量案怯,這個(gè)時(shí)候君旦,angularjs就無法尋找到對(duì)應(yīng)的依賴關(guān)系了,所以一般使用的是行內(nèi)注入的方式嘲碱。
行內(nèi)注入
var app = angular.module('app',[]);
app.controller('demoController',['$scope','$htto','function('$scope','$http'){
//邏輯代碼
});
將依賴關(guān)系寫在數(shù)組中金砍,除了最后一個(gè)參數(shù)是執(zhí)行業(yè)務(wù)邏輯以外,前面的參數(shù)就是對(duì)應(yīng)的依賴注入麦锯,這種方式就解決了推斷式注入的問題恕稠,在代碼壓縮完后,仍然能查找到對(duì)應(yīng)的依賴扶欣。