淺談Angular6的服務(wù)和依賴注入
在開發(fā)中,組件一般用來(lái)寫視圖有關(guān)的功能,服務(wù)則寫一些其他的邏輯,諸如從服務(wù)器獲取數(shù)據(jù)、驗(yàn)證用戶輸入或直接往控制臺(tái)中寫日志等工作.
先解釋兩個(gè)概念:
- Providers(提供商):是個(gè)比較抽象的名詞,我們把它想象為'圖紙'更好理解一些,就比如我們想要生產(chǎn)汽車,就需要先有汽車的圖紙,圖紙上記錄了生產(chǎn)工藝和材料尺寸之類,這樣汽車才生產(chǎn)的出來(lái).provider通常就是自己寫的服務(wù)類.
- Injector(注入器):就是字面上的意思,將某一類事物注入到另一類事物中的工具.angular應(yīng)用在啟動(dòng)時(shí),會(huì)自動(dòng)創(chuàng)建.
假想一個(gè)去醫(yī)院看病的過(guò)程:
找醫(yī)生看病判斷病情,醫(yī)生開處方 --> 處方交給護(hù)士 --> 護(hù)士小姐姐根據(jù)處方給你注射藥物.
這里醫(yī)生開的處方是providers
,將處方交給護(hù)士則是將providers
注冊(cè)到injector
,護(hù)士小姐姐是injector
angular中有很多方式可以將providers
注冊(cè)到injector
:
@Injectable 裝飾器
在服務(wù)類的 @Injectable 裝飾器中
//service @Injectable({ providedIn: 'root', })
providedIn: 'root'
告訴 Angular在根注入器中注冊(cè)這個(gè)圖紙.root 還可以是某一個(gè)具體的模塊名.
這種方式注冊(cè),在代碼編譯打包時(shí),可以執(zhí)行搖樹優(yōu)化,這會(huì)移除所有沒(méi)在應(yīng)用中使用過(guò)的服務(wù)。搖樹優(yōu)化會(huì)使打包體積更小。
@NgModule 中的 providers
在模塊的 @NgModule
中
//service @Injectable() //module @NgModule({ providers: [ UserService, { provide: APP_CONFIG, useValue: HERO_DI_CONFIG } ], })
這種方式注冊(cè),可以對(duì)圖紙進(jìn)行一些額外的配置.
note:在@NgModule中注冊(cè)的服務(wù),在圖紙中也需要寫@Injectable()裝飾器
在組件中注冊(cè)
在組件的 @Component 中
@Component({ selector: 'app-heroes', providers: [ HeroService ]
這種方式注冊(cè),會(huì)注冊(cè)到每個(gè)組件實(shí)例自己的注入器上。(多個(gè)組件會(huì)有多個(gè)注入器)
note:服務(wù)在每個(gè)注入器的范圍內(nèi)是單例的。 在任何一個(gè)注入器中,最多只會(huì)有同一個(gè)服務(wù)的一個(gè)實(shí)例。
不提供圖紙
最常見(jiàn)的圖紙是class,但是在配置providers: []
時(shí),也可以不提供class圖紙,而是返回對(duì)象的工廠函數(shù),或是對(duì)象字面量[{ provide: Logger, useClass: Logger }]
也可以使用useValue
屬性直接交付一個(gè)對(duì)象實(shí)例,[{ provide: Logger, useValue: silentLogger }]
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
angular基于ng-alain定義自己的select組件示例
這篇文章主要介紹了angular基于ng-alain定義自己的select組件示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02用Angular實(shí)時(shí)獲取本地Localstorage數(shù)據(jù),實(shí)現(xiàn)一個(gè)模擬后臺(tái)數(shù)據(jù)登入的效果
這篇文章主要介紹了用ANGULAR實(shí)時(shí)獲取本地LOCALSTORAGE數(shù)據(jù),實(shí)現(xiàn)一個(gè)模擬后臺(tái)數(shù)據(jù)登入的效果的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11AngularJS 入門教程之HTML DOM實(shí)例詳解
本文主要介紹AngularJS HTML DOM,這里幫大家整理了詳細(xì)的資料,并附實(shí)例代碼詳細(xì)講解,有需要的小伙伴可以參考下2016-07-07AngularJS中如何使用$parse或$eval在運(yùn)行時(shí)對(duì)Scope變量賦值
這篇文章主要介紹了AngularJS中如何使用$parse或$eval在運(yùn)行時(shí)對(duì)Scope變量賦值的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-01-01從?Angular?Route?中提前獲取數(shù)據(jù)的方法詳解
這篇文章主要介紹了從?Angular?Route?中提前獲取數(shù)據(jù),通過(guò)本文,你將學(xué)會(huì)使用?resolver,?在?Angular?App?中應(yīng)用?resolver,應(yīng)用到一個(gè)公共的預(yù)加載導(dǎo)航,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Angular.js之作用域scope''@'',''='',''&''實(shí)例詳解
這篇文章主要介紹了Angular.js之作用域scope'@','=','&'實(shí)例詳解,需要的朋友可以參考下2017-02-02淺談AngularJS中$http服務(wù)的簡(jiǎn)單用法
這篇文章主要介紹了淺談AngularJS中$http服務(wù)的簡(jiǎn)單用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05