如何从应用程序模块配置或传递环境变量到Angular库?

18 浏览
0 Comments

如何从应用程序模块配置或传递环境变量到Angular库?

我有一个Angular库,调用后端Java API。我想通过导入该库的Angular应用程序模块,在该库中配置API URL的能力。

我尝试在库中使用forRoot(),但我的应用程序在运行时出现以下错误,因为我的应用程序模块是懒加载的:

ERROR Error: \"StaticInjectorError[FeatureComponent -> Service]: StaticInjectorError(AppModule)[HttpClient]: StaticInjectorError(Platform: core)[HttpClient]: NullInjectorError: No provider for HttpClient!\"

以下是代码库片段 -

 export class LibModule {
      constructor(injector: Injector) {
      setLibInjector(injector);
      }
  public static forRoot(environment: any): ModuleWithProviders {
    return {
      ngModule: LibModule,
      providers: [
        {
          provide: 'appEnv', // use InjectionToken
          useValue: environment
        }
      ]
    };
  }
}

以下是我导入该库的应用程序中的模块之一 -

@NgModule({
  declarations: [
  ],
  imports: [
    LibModule.forChild({baseUrl: '/configuration/'}),
  ],
  entryComponents: [],
  providers: []
})
export class FeatureModule {
}

注意:

我想知道如何编写一个库,以从任何类型的Angular模块(急切加载或懒加载)接受配置参数。有人将此问题标记为重复问题。

admin 更改状态以发布 2023年5月21日
0
0 Comments

假设您希望在XyzService中使用environment,而它位于您的LibModule中。

App.module.ts

 imports: [
      BrowserModule,
      LibModule.forRoot({
        environment: environment
      })
   ]

LibModule.module.ts

export class LibModule{ 
  static forRoot(environment): ModuleWithProviders {
    console.log(environment);
    return {
      ngModule: LibModule,
      providers: [XyzService,{provide: 'config', useValue: environment}]
    };
  }
}

XyzService.service :

export class XyzService{
  constructor(@Inject('config') private config:any) {
    console.log(config)
   }
}

0