angular---依賴注入

一 基本流程

服務或組件中註冊服務提供商-->配置-->注入器-->把服務注入到-->組件中

組件經過constructor裏面的DI令牌,到相應的注入器中,經過注入器中的DI令牌,找到對應的實例,而後注入到constructor裏面的實例中

//DI令牌和它相關聯的服務
providers:[{provide:AService,useClass:BService}]
constructor(
  //實例與DI令牌
  private aService:BService,
){}

二 服務提供商

1.表面解讀

{ provide: Logger, useClass: BetterLogger }

前面一個鍵值對是用來找依賴,後面一個鍵值對是用來建立依賴ide

2.非類的依賴---useValue

//1.建立令牌---value.ts
export const AToken=new InjectionToken('a')//'a'是描述
//2.用建立好的令牌註冊提供商
{provide:AToken,useValue:hero}
//3.把依賴注入到構造函數
constructor(
    //前面沒有private
    @Inject(AToken) obj
){  
    //把依賴放到this上
    this.myobj=obj
}

三 注入器

1.只要令牌和類,有一個不相同,就會產生新的實例

下面的例子顯示了,令牌不同,類相同,可是產生了不一樣的實例函數

providers:[
    {provide:AService,useClass:AService},
    {provide:BService,useClass:AService},
]
constructor(
    private aService:AService,
    private bService:BService,
){}
ngOnInit(){
    this.aService.a=11
    console.log('a',this.aService['a'],this.bService['a'])//11,1
}

2.當令牌不同,想使用相同的實例,使用useExisting

providers:[
    {provide:AService,useClass:AService},
    {provide:BService,useExisting:AService},
]

四 服務實例

1.子組件能直接使用父組件注入器裏面的實例

流程 父組件修改服務裏面的值,而後取值,子組件修改服務裏面的值,而後取值this

相關文章
相關標籤/搜索