angular2 的依賴注入包含了太多的內(nèi)容,其中的一個(gè)重點(diǎn)就是注入器,而注入器又非常難理解,今天我們不深入介紹注入器的內(nèi)容,可以參考官方文檔,我們今天來說注入器的層級(jí)。

也就是組件獲取服務(wù)的容器會(huì)選擇具體哪一個(gè)。

先簡單介紹一個(gè)背景:有3個(gè)組件AppComponent 根組件、DetailList組件 ( 日志列表組件)、Detail組件( 日志組件)。

這三個(gè)組件會(huì)形成一個(gè)組件樹,對(duì)應(yīng)的我們也可以認(rèn)為每個(gè)組件都會(huì)有一個(gè)獨(dú)立的注入器(有時(shí)候不會(huì)出現(xiàn),但是可以這么認(rèn)為)。

加入一個(gè)日志服務(wù)LoggerService,如果按照我們普通的入門方式,在根模塊providers 中提供LoggerService。那么在整個(gè)應(yīng)用程序中,LoggerService只有一個(gè)實(shí)例,什么意思呢?就是說無論在哪個(gè)組件,獲取到的都是首次創(chuàng)建的LoggerService,所有組件共用一個(gè)服務(wù)實(shí)例,這有時(shí)候會(huì)是一個(gè)有用的特性,比如我們使用的全局配置。


全局唯一不是我們這次要驗(yàn)證的重點(diǎn),因?yàn)檫@個(gè)太普通,我們這次要說明的是我們?nèi)绾卧诿總€(gè)組件中都獲取單獨(dú)的LoggerService實(shí)例,即每個(gè)組件的實(shí)例都不同。這個(gè)就需要對(duì)ng2的依賴注入有所了解才可以。

我們逐步來說明如何實(shí)現(xiàn)?

為了便于看到這篇短文的同學(xué)有所了解,我加入一些基礎(chǔ)代碼。

1.app.module.ts 應(yīng)用程序根模塊。注意此處我們沒有在Providers中注冊loggerService。當(dāng)然注冊了通過后面的方法也可以達(dá)到我們的目的。

復(fù)制代碼
 1 import { NgModule, Optional, SkipSelf, ReflectiveInjector} from '@angular/core';  2 import { BrowserModule } from '@angular/platform-browser';  3  4 /* App Root */  5
        		

網(wǎng)友評(píng)論