在Angular 7中将环境变量从一个模块传递到另一个模块

问题描述 投票:0回答:1

我正在开发具有两个应用程序(应用程序A,应用程序B)的项目。两个应用程序都使用大约100个组件。因此,我创建了一个Angular库,并在Modules中组织了这些组件。一切正常。当我需要将环境传递给库中的模块时,我陷入了困境。

@NgModule({
 imports:[
 LibModule2, // need to pass environment from LibModule1
 LibModule3,
]
})
export class LibModule1{
  export function forRoot(environment):ModuleWithProviders{
   return {
       ngModule:LibModule1,
       providers:[
        {provider:ENV, useValue:environment}
       ]
   }
 }
}


//App1

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

我仅在应用程序中需要LibModule1。但是还需要将环境传递给LibModule2,LibModule3。我怎样才能做到这一点?我是否以错误的方式处理它?

angular angular-module angular-library
1个回答
0
投票
向您的库模块添加静态类:

export class Lib1Module { static forRoot(config: any): ModuleWithProviders { return { ngModule: Lib1Module, providers: [{provide: 'config', useValue: config}] }; } } export class Lib2Module { static forRoot(config: any): ModuleWithProviders { return { ngModule: Lib2Module, providers: [{provide: 'config', useValue: config}] }; } }

然后将environmentapp.module传递到Lib1ModuleLib2Module,如下所示:

imports:[
    CommonModule,
    BrowserAnimationsModule,
    ReactiveFormsModule,
    HttpClientModule,
    RouterModule,
    BrowserModule,
    FormsModule,
    GigLib1Module.forRoot(environment),
    GigLib2Module.forRoot(environment)
]

现在,将environment文件注入到您的库中。

使用方法:

environment :any constructor(@Inject('config') config) { if (config) { this.environment = config; } }

现在可以从主项目轻松更改环境。

© www.soinside.com 2019 - 2024. All rights reserved.