Angular設(shè)計(jì)模式hierarchical?injector實(shí)現(xiàn)代碼復(fù)用模塊化
Angular 的 "dependency injection"
Angular 的 "dependency injection" 是一種設(shè)計(jì)模式,它可以幫助我們更有效地組織和共享代碼。在 Angular 中,我們可以通過(guò)注入服務(wù)(一個(gè)常見(jiàn)的可注入對(duì)象類型)到組件、指令或其他服務(wù)中,實(shí)現(xiàn)代碼的復(fù)用和模塊化。
Angular 的注入器系統(tǒng)是分層級(jí)的,也被稱為 "hierarchical injector"。這意味著你可以在不同的層級(jí)創(chuàng)建和注入服務(wù),從而決定它們的作用范圍和共享行為。
工作原理
舉個(gè)例子,假設(shè)你有一個(gè) LoggerService
用于記錄應(yīng)用的日志信息。你可以在應(yīng)用的根模塊 AppModule
中提供這個(gè)服務(wù):
import { LoggerService } from './logger.service'; @NgModule({ providers: [ LoggerService ], ... }) export class AppModule { }
這樣,LoggerService
就成了一個(gè)單例服務(wù),整個(gè)應(yīng)用只會(huì)有一個(gè) LoggerService
實(shí)例。你可以在任何需要的地方注入這個(gè)服務(wù):
import { LoggerService } from './logger.service'; @Component({ ... }) export class SomeComponent { constructor(private logger: LoggerService) { this.logger.log('Hello World!'); } }
然而,有時(shí)候你可能希望在某個(gè)特定的組件及其子組件中使用一個(gè)獨(dú)立的 LoggerService
實(shí)例。這時(shí),你就可以在那個(gè)組件的元數(shù)據(jù)中提供 LoggerService
:
import { LoggerService } from './logger.service'; @Component({ providers: [ LoggerService ], ... }) export class SomeSpecificComponent { constructor(private logger: LoggerService) { this.logger.log('Hello Specific World!'); } }
在這種情況下,SomeSpecificComponent
及其所有子組件中注入的 LoggerService
都會(huì)是這個(gè)新的實(shí)例,而不是在 AppModule
中提供的單例。
這就是 Angular 的 "hierarchical injector" 的工作原理。每個(gè)注入器都有一個(gè)父注入器,當(dāng)你嘗試在某個(gè)組件中注入服務(wù)時(shí),Angular 會(huì)首先在該組件的注入器中查找該服務(wù),如果沒(méi)找到,就會(huì)去父注入器中查找,這個(gè)過(guò)程會(huì)一直持續(xù)到根注入器。如果在整個(gè)過(guò)程中都沒(méi)找到該服務(wù),Angular 就會(huì)拋出錯(cuò)誤。
以上就是Angular設(shè)計(jì)模式hierarchical injector實(shí)現(xiàn)代碼復(fù)用模塊化的詳細(xì)內(nèi)容,更多關(guān)于Angular hierarchical injector的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
AngularJS日期格式化常見(jiàn)操作實(shí)例分析
這篇文章主要介紹了AngularJS日期格式化常見(jiàn)操作,結(jié)合實(shí)例形式分析了AngularJS日期格式化常用參數(shù)功能、設(shè)置與使用技巧,需要的朋友可以參考下2018-05-05Angularjs實(shí)現(xiàn)上傳圖片預(yù)覽功能
本文通過(guò)實(shí)例代碼給大家介紹了Angularjs實(shí)現(xiàn)上傳圖片預(yù)覽功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09詳解基于Angular4+ server render(服務(wù)端渲染)開(kāi)發(fā)教程
本篇文章主要介紹了詳解基于Angular4+ server render(服務(wù)端渲染)開(kāi)發(fā)教程 ,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08解決angular2 獲取到的數(shù)據(jù)無(wú)法實(shí)時(shí)更新的問(wèn)題
今天小編就為大家分享一篇解決angular2 獲取到的數(shù)據(jù)無(wú)法實(shí)時(shí)更新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08解決AngualrJS頁(yè)面刷新導(dǎo)致異常顯示問(wèn)題
本篇文章主要介紹了解決AngualrJS頁(yè)面刷新導(dǎo)致異常顯示問(wèn)題的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04AngularJS實(shí)現(xiàn)頁(yè)面定時(shí)刷新
本篇文章主要介紹了AngularJS實(shí)現(xiàn)頁(yè)面定時(shí)刷新,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03