angular2 的依賴注入包含了太多的內(nèi)容,其中的一個重點就是注入器,而注入器又非常難理解,今天我們不深入介紹注入器的內(nèi)容,可以參考官方文檔,我們今天來說注入器的層級。
也就是組件獲取服務(wù)的容器會選擇具體哪一個。
先簡單介紹一個背景:有3個組件AppComponent 根組件、DetailList組件 ( 日志列表組件)、Detail組件( 日志組件)。
這三個組件會形成一個組件樹,對應(yīng)的我們也可以認(rèn)為每個組件都會有一個獨立的注入器(有時候不會出現(xiàn),但是可以這么認(rèn)為)。
加入一個日志服務(wù)LoggerService,如果按照我們普通的入門方式,在根模塊providers 中提供LoggerService。那么在整個應(yīng)用程序中,LoggerService只有一個實例,什么意思呢?就是說無論在哪個組件,獲取到的都是首次創(chuàng)建的LoggerService,所有組件共用一個服務(wù)實例,這有時候會是一個有用的特性,比如我們使用的全局配置。
全局唯一不是我們這次要驗證的重點,因為這個太普通,我們這次要說明的是我們?nèi)绾卧诿總€組件中都獲取單獨的LoggerService實例,即每個組件的實例都不同。這個就需要對ng2的依賴注入有所了解才可以。
我們逐步來說明如何實現(xiàn)?
為了便于看到這篇短文的同學(xué)有所了解,我加入一些基礎(chǔ)代碼。
1.app.module.ts 應(yīng)用程序根模塊。注意此處我們沒有在Providers中注冊loggerService。當(dāng)然注冊了通過后面的方法也可以達(dá)到我們的目的。
1 import { NgModule, Optional, SkipSelf, ReflectiveInjector} from '@angular/core'; 2 import { BrowserModule } from '@angular/platform-browser'; 3 4 /* App Root */ 5