如何从应用程序模块配置环境变量或将其传递给角度库?

时间:2019-04-15 10:38:53

标签: angular typescript angular-library

我有一个角度库,它调用后端Java api。我希望能够通过导入库的角度应用程序模块在库中配置api网址。

我尝试在库中使用Dictionary::load,但是我的应用程序给出了以下运行时错误,因为我的应用程序模块延迟加载-

  

错误错误:“ StaticInjectorError [FeatureComponent-> Service]:StaticInjectorError(AppModule)[HttpClient]:StaticInjectorError(Platform:core)[HttpClient]:NullInjectorError:HttpClient没有提供者!”

下面是代码库摘要-

forRoot()

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

 export class LibModule {
      constructor(injector: Injector) {
      setLibInjector(injector);
      }

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

注意 我想知道如何编写库以接受任何角度模块(急切或延迟加载)的配置参数。有人将此问题标记为重复。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我的临时解决方案是将环境变量@Input()传递给库的组件。

注意:我最近开始构建库。我不是专家。

答案 1 :(得分:0)

假设您想在LibModule中使用environment中的XyzService

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)
   }
}