首页 > 解决方案 > 将 environment.ts 传递给 Angular 库模块

问题描述

我正在构建一个 Angular 库,它将公开服务和中间件以在导入其他 Angular 应用程序时执行身份验证。

在尝试将此模块拉入独立的Angular Library之前,它依赖于environment.ts应用程序中的文件(我只是像这样导入它:)import { environment } from '../../../environments/environment';

如何将环境文件传递给现在将导入到我的 Angular 应用程序中的模块?

environment或者将文件作为 JSON 传递给我要公开的每个服务和中间件是否更好?

标签: angularangular-moduleangular-library

解决方案


实现这一点的最佳方法是为您的模块公开一个配置对象,而不是直接使用环境文件。就像是:

import { InjectionToken } from '@angular/core';

export interface LibConfig {
  foo: string;
  bar: string;
}

export const LibConfigService = new InjectionToken<LibConfig>('LibConfig');

在您的主模块中:

export class LibModule {

  static forRoot(config: LibConfig): ModuleWithProviders {
    return {
      ngModule: LibModule,
      providers: [
        {
          provide:  LibConfigService,
          useValue: config
        }
      ]
    };
  }
}

因此,将库添加到项目的模块导入时,您可以执行以下操作:

LibModule.forRoot({
  foo: environment.foo,
  bar: environment.bar
})

在库中,您可以使用以下内容访问配置:

  private libConfig: LibConfig;

  constructor(@Inject(LibConfigService) private config) {
    this.libConfig = config;
  }

  public getConfig(): LibConfig {
    return this.libConfig;
  }

推荐阅读