Передача переменных среды из одного модуля в другой в Angular 7 - PullRequest
0 голосов
/ 06 октября 2019

Я работаю над проектом, в котором есть два приложения (приложение A, приложение B). В обоих приложениях используется около 100 компонентов. Поэтому я создал Angular Library и организовал эти компоненты в модулях. Все отлично работаетЯ застрял, когда мне нужно передать среду для модулей в библиотеке.

@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. как я могу это сделать? Я неправильно подхожу к нему?

1 Ответ

0 голосов
/ 06 октября 2019

У меня есть такая проблема на некоторое время, и лучшее решение, которое я нашел, это:

Добавить статический класс в ваши библиотечные модули:

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}]
    };
  }
}

Затем передать environment из app.module в Lib1Module & Lib2Module Пример:

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

Теперь среду можно легко изменить из основного проекта.

...