forRoot的作用
爲了保證service的全局唯一性,防止惰性加載的時候重新生成service實例
示例:
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{}