angular里forRoot的作用

模块A是这样定义的

@NgModule({ 
    providers: [AService],
    declarations: [ TitleComponent ],
    exports:      [ TitleComponent ],
})
export class A {}

如果有惰性模块lazyModule导入模块A,那么会生成子注入器将AService重新生成

这时如果想将AService变成全局唯一的,那么在lazyModule导入的时候就不要导入providers而只导入TitleComponent

forRoot这时就有用武之地了

改写A

@NgModule({ 
    providers: [],
    declarations: [ TitleComponent ],
    exports:      [ TitleComponent ],
})
export class A {
   static forRoot() {
        return {ngModule: A, providers: [AService]};
   }
}

在appModule中使用A.forRoot导入A模块

@NgModule({
  imports: [A.forRoot()]
})
export class AppModule {}

在lazyModule中正常导入A模块

@NgModule({
  imports: [A]
})
export class LazyModule{}

 

posted on 2018-08-21 14:44  chen8840  阅读(5236)  评论(0编辑  收藏  举报