国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

深入理解Angular4中的依賴注入

2019-11-19 16:24:25
字體:
來源:轉載
供稿:網友

在Angular中使用依賴注入,可以幫助我們實現松耦合,可以說只有在組件中使用依賴注入才能真正的實現可重用的組件。
如果我們有個服務product.service.ts,其中export了一個ProductService類,類中有一個getProduct方法。

如果不使用依賴注入,假設我們需要在product組件中使用這個服務時就會new一個ProductService類,但如果這個組件被用到了另一個地方,需要的服務改變了,我們就不得不更改組件中的內容,這樣的組件不能說是可復用的。

一、注入器

Angular中的注入器只有一種實現方法就是在構造函數中聲明。

例如在一個組件中

constructor(productService: ProductService){}

通俗的講這段代碼的意思就是說,這個組件創建了一個productService,而這個productService是依賴ProductService的,這里的ProductService只是一個token,至于ProductService 是什么,是怎么實現的,全都是由提供器說明的。

二、提供器

通常提供器定義在應用級,及app.module.ts中,供所有組件或服務使用,當然也可以定義在某一個組件中,只供這一個組件使用。

我們以定義在應用級為例:

@NgModule({  provides:[ProductService]})

這段代碼其實這一個簡寫,全寫為:

@NgModule({  provides:[{    provide: ProductService,    useClass:ProductService  }]})

這段代碼中的provide聲明的就是我們剛剛在注入器中提過的token,就是說這兩個token是一一對應的,Angular會到提供器中找到和注入器相同的token.

代碼中的useClass是實例化ProductService類,及我們幫助我們new 了一個類出來。除了useClass外,比較常用的還用useFactory,使用工廠模式實例化一個類。

這時候我們在組件中就可以直接使用ProductService類中的方法了。

當token和想要實例化的類名字相同時,我們就可以使用上面那種簡寫的方法。

說了這么多,那到底怎么才能體現出可復用性呢?

如果現在我們的product組件用到了另一個地方需要使用另一個服務,我們命名為AnotherProductService。有了依賴注入我們就不必要更改組件,而是更改app.module.ts中的提供器:

@NgModule({  provide: ProductService,  useClass: AnotherProductService})

從這段代碼可以看出,token并沒有改變,可是這是實例化的類變為了AnotherProductService。

總結來說,當組件在構造函數中說明自己想要依賴一個類時,Angular首先會在這個組件自身找有沒有提供器,如果沒有就去這個組件的父組件中找,如果也沒有找到就去應用級(app.module.ts)中找。找到后,就會按照提供器可說明的為組件注入它想要的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 全州县| 白朗县| 呼伦贝尔市| 中江县| 珠海市| 班戈县| 合江县| 郸城县| 乾安县| 仁布县| 胶州市| 灵武市| 武清区| 江陵县| 区。| 积石山| 武汉市| 宾阳县| 台江县| 米脂县| 同德县| 神木县| 即墨市| 丰镇市| 申扎县| 兴仁县| 枣强县| 余庆县| 海安县| 中江县| 延长县| 阳朔县| 都匀市| 嘉峪关市| 双牌县| 维西| 合阳县| 兴义市| 泰和县| 十堰市| 永定县|