Передать environment.ts в модуль угловой библиотеки - PullRequest
0 голосов
/ 18 октября 2019

Я создаю библиотеку Angular, которая будет предоставлять сервис и промежуточное программное обеспечение для выполнения аутентификации при импорте в другие приложения Angular.

Прежде чем пытаться перетащить этот модуль в автономную Angular Library ,он полагался на файл environment.ts в приложении (я просто импортировал его так: import { environment } from '../../../environments/environment';).

Как передать файл среды в модуль, который теперь будет импортирован в мое приложение Angular?

Или лучше передать файл environment, как JSON, в каждую службу и часть промежуточного программного обеспечения, которое я предоставляю?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Вы можете настроить модуль, используя шаблон forRoot.

В своем библиотечном модуле:

export const OPTIONS = new InjectionToken<LibraryOptions>('options');

@NgModule({...})
export class LibraryModule {

  static forRoot(options: LibraryOptions): ModuleWithProviders {
  return {
   ngModule: LibraryModule,
   providers: [
   {
     provide: OPTIONS,
     useValue: options
   }]
  }
 }

}

, а затем добавить токен OPTIONS в ваши компоненты и службы для доступа к опциям.

constructor(@Inject(OPTIONS) options: LibraryOptions){}

для использования библиотеки:

imports:[LibraryModule.forRoot({...})]
1 голос
/ 18 октября 2019

Лучший способ добиться этого - предоставить объект конфигурации для вашего модуля вместо прямого использования файла среды. Что-то вроде:

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

и в lib вы можете получить доступ к конфигурации с помощью чего-то вроде:

  private libConfig: LibConfig;

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

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