angular中forRoot&forChild的作用

angular中forRoot&forChild的作用

用法

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
@NgModule({
  declarations: [],
  imports: [
    CommonModule
  ]
})
export class ChildModule {
  static forChild(): ModuleWithProviders {
    return {
      ngModule: ChildModule,
      providers: []
    }
  }
}

爲什麼

angular中,對於一些公共的組件,指令,管道,當我們需要在某個模塊中使用時,我們就需要在該模塊中導入一次。

當我們導入XXXModule時,angular會爲我們註冊該模塊上面的所有服務,如果我們在多個模塊中導入了XXXModule模塊,XXXModule模塊上面的服務是不會重複註冊的,因爲angular會確保服務都是單例的,也就是說一個應用裏只會有一個該服務的實例。這能確保我們用服務共享數據時,不同模塊取到的數據是一致的。

但有一種情況angular處理不了,當我們懶加載某一個模塊時,該模塊上面的服務會重新註冊,如果該服務已經被註冊過了,就會造成應用中一個服務有多個實例的情況。

怎麼能確保完全的單例呢?這個時候我們就需要藉助forRootforChild了。

觀察ModuleWithProviders,我們可以看到providers屬性是可選的,他們的區別也是在providers上。我們可以將需要確保完全單例的服務移動到forRoot中去。在主模塊中導入模塊時通過forRoot方法導入,在子模塊中導入模塊時直接導入。這樣就能確保服務只會註冊一次了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章