共享模块

一、为什么需要?

假定有个用户服务用来获取用户信息,这类服务不光只有在登录时才会用到,可能我们在用户管理模块、甚至交易模块中都可能需要用到它。

当然这类服务或者一些通用性组件、指令会很多,但我们不可能在每一个模块中都去独立导入。一方面但有变动时会牵连很多,另一方面会有很多重复代码。

因此,将这类组件、指令、服务等放在一个独立的模块中再适合不过了,一般我们取名为 SharedModule

二、创建

一般我们会在 src/app/shared/shared.module.ts 文件,其内容跟我们前一章介绍一样去创建它:

@NgModule({
    imports: [ CommonModule ],
    providers: [ UserService ],
    declarations: [  ], // etc: component, pipe
    export: [
        CommonModule,
        UserService
    ]
})
export class SharedModule {}

重点是 export,因为这是一个共享模块,它会被不同需要它的模块被导入,因此在共享模块里也就需要做导出。

假如 src/app/user/user.module.ts 需要使用到 UserService 我们只需要将 SharedModule 导入即可。

@NgModule({
    imports: [ SharedModule ]
})

共享依赖注入

再回过头来看 UserService 服务,我们知道DI对于服务而言是单例。而对于共享模块会在不同模块中被导入,那么为了避免在不同模块中引起多次被实例。

需要在模块内定义一个静态方法 forRoot(),并将 providers 的内容单独处理,这样就表示服务会直接注入到根模块当中,这样对于后续的其他多次导入时,直接从根模块中查找。

@NgModule({
})
export class SharedModule {
     static forRoot(): ModuleWithProviders { 
        return {
            ngModule: SharedModule,
            providers: [ UserService ]
        }
     }
}

results matching ""

    No results matching ""