第四章 Angular依賴注入

4.1本章簡介

第三章 Angular Route導航 我們學了路由的相關知識影暴,這一章將繼續(xù)開發(fā)在線競拍程序 ,并把精力集中在如何使用angular處理對象的過程腻豌,也就是依賴注入 (Dependency Injection 簡稱DI)家坎。

本章的學習內(nèi)容

  • 什么是依賴注入模式及使用依賴注入的好處
  • 介紹Angular的依賴注入實現(xiàn):注入器和提供器
  • 注入器的層級關系

4.2依賴注入的好處

4.2.1、了解依賴注入的好處之前先要知道依賴注入要解決的問題
假設你寫了一個方法吝梅,方法的參數(shù)是一個對象虱疏,當你調(diào)用這個方法時,需要實例化這個對象并把它傳遞給方法苏携,假設在線競拍程序有個發(fā)貨中心負責把你買到的商品發(fā)給你做瞪,程序中我們可能會編寫這樣的代碼:

var product = new Product();
createShipment(product);

如果我們調(diào)用的對象需要三個參數(shù),比如發(fā)貨時的商品信息、快遞公司信息装蓬、訂單的信息著拭,每個對象又有自己的依賴(比如訂單信息里面又有地址信息對象),那代碼就可能變成這樣:

var product = new Product();'
var shipCompany = new shipVompany();
var address = new Address();
var order = new Order();
order.setAddress(address);
createShipment(product, shipCompany, order)

這個過程有大量的實例化對象代碼牍帚,能不能找一個某人來替我們創(chuàng)建這些實例化代碼依賴的對象以及對象依賴的對象儡遮,使得我們使用的時候只需要寫最后一句?

如果一個對象A要依賴類型為B的這樣一個對象暗赶,那么對象A不需要明確地去實例化B峦萎,B由外部機制注入進來,對象A只需要聲明我需要一個B類型的對象忆首,有人能給我一個嗎爱榔?
這就是依賴注入模式要解決的問題。

4.2.2糙及、控制反轉
與依賴注入同時出現(xiàn)的另一個概念叫做控制反轉:Inversion of Control 簡稱IOC详幽。控制反轉和依賴注入是一體兩面浸锨,表達的是一個思想唇聘。

控制反轉側重于描述目的:如何將依賴的控制權從代碼的內(nèi)部轉到代碼的外部;
依賴注入側重于描述手段:如何實現(xiàn)控制反轉柱搜。

實現(xiàn)了依賴注入模式的框架被稱為IOC容器迟郎,Angular框架就是一個IOC容器,Angular實現(xiàn)控制反轉的手段就是依賴注入聪蘸。

這里描述了一些概念宪肖,比較難理解,需要一些面向對象的思想健爬,后面可以慢慢的理解控乾。

控制反轉是指將依賴的控制權從代碼的內(nèi)部轉到代碼的外部,比如4.2.1中的代碼對代碼的依賴是由代碼的內(nèi)部所決定的娜遵。

4.2.3蜕衡、使用依賴注入模式的好處
簡單來說依賴注入會幫助你以松耦合的方式來編寫代碼,讓你的代碼可測性和可重用性更高设拟。

@NgModule({
  providers: [productService],  //1慨仿、在Angular中根據(jù)指定providers來告訴Angular哪些對象需要依賴注入
  ...省略其他配置
})
export class AppModule{ }

@Component({
  ...省略其他配置
})
export class ProductComponent{
  product: Product;
  constructor(productService: ProductService){  //2、聲明自己需要一個類型為ProductService的token
    this.product = productService.getProduct();
  }
}

providers: [productService] 等價于 providers:[{provcide: ProductService, userClass: ProductService}]
這里涉及Angular的一個概念:token纳胧,一個token代表一個被注入的對象的類型镰吆,token的類型由provider配置對象的provide屬性來決定。所以這段代碼的意思是躲雅,注冊一個類型是ProductService的token鼎姊,當有組件或指令聲明自己需要一個類型為ProductService的token時,實例化一個ProductService并將其注入到對象。

用它的構造函數(shù)聲明自己需要一個類型為ProductService的token相寇,Angular框架看到構造函數(shù)的聲明后慰于,會在providers里面去找這個類型的token所對應的類,這里寫的是ProductService唤衫,所以會實例化一個ProductService到構造函數(shù)賦并值給productService婆赠,

如果你想在其他項目中重用ProductComponent組件,而另一個項目中有另一個實現(xiàn)了ProductService的類佳励,那你可以修改那個項目的AppModuleproviders聲明休里,修改為:

providers:[{provcide: ProductService, userClass: AnotherProductService}]

這樣ProductComponent本身就不需要做任何更改。也消除了Product和ProductService的緊耦合赃承,提高了ProductComponent組件的重用性妙黍。

4.3、提供器入門

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞧剖,一起剝皮案震驚了整個濱河市拭嫁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抓于,老刑警劉巖做粤,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捉撮,居然都是意外死亡怕品,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門巾遭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肉康,“玉大人,你說我怎么就攤上這事恢总∮蓿” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵片仿,是天一觀的道長。 經(jīng)常有香客問我尤辱,道長砂豌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任光督,我火速辦了婚禮阳距,結果婚禮上,老公的妹妹穿的比我還像新娘结借。我一直安慰自己筐摘,他們只是感情好,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咖熟,像睡著了一般圃酵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馍管,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天郭赐,我揣著相機與錄音,去河邊找鬼确沸。 笑死捌锭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的罗捎。 我是一名探鬼主播观谦,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼桨菜!你這毒婦竟也來了坎匿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤雷激,失蹤者是張志新(化名)和其女友劉穎替蔬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屎暇,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡承桥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了根悼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凶异。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挤巡,靈堂內(nèi)的尸體忽然破棺而出剩彬,到底是詐尸還是另有隱情,我是刑警寧澤矿卑,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布喉恋,位于F島的核電站,受9級特大地震影響母廷,放射性物質(zhì)發(fā)生泄漏轻黑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一琴昆、第九天 我趴在偏房一處隱蔽的房頂上張望氓鄙。 院中可真熱鬧,春花似錦业舍、人聲如沸抖拦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽态罪。三九已至噩茄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間向臀,已是汗流浹背巢墅。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留券膀,地道東北人君纫。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像芹彬,于是被迫代替她去往敵國和親蓄髓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 上一章舒帮,我們理解了angular框架的各種指令会喝,控制器,各種服務模塊的調(diào)用玩郊。這個是 angular...
    風清揚101閱讀 486評論 0 1
  • Angular算是將后端開發(fā)工程化引入前端的先驅之一,而Dependency injection依賴注入(后面簡稱...
    點融黑幫閱讀 2,256評論 0 5
  • 依賴注入 AngularJS采用模塊化的方式組織代碼肢执,將一些通用邏輯封裝成一個對象或函數(shù),實現(xiàn)最大程度的復用译红,這導...
    codeTao閱讀 153評論 0 0
  • 1.依賴注入(DI) DI是一個設計模式预茄,處理組件如何獲取依賴。angular中 injector子系統(tǒng)專門負責創(chuàng)...
    梧桐葉_閱讀 1,399評論 1 6
  • 暫時我只是一枚“法則“的搬運工,負責提煉關鍵點 接近法則與格式塔 http://www.ui.cn/detail/...
    OblivionO閱讀 698評論 0 2