Передача данных из углового приложения в угловую библиотеку - PullRequest
1 голос
/ 16 октября 2019

Мне нужно иметь возможность передавать некоторые данные (конфигурацию) из углового приложения в угловую библиотеку. Требование заключается в том, что конфигурация должна быть доступна в декораторе библиотечного NgModule, поэтому я могу импортировать некоторые модули условно. Например:

@NgModule({
    imports: [
        !envService.data.production ? StoreDevtoolsModule.instrument() : [],
    ]
})
export class LibrarysModule { }

Я не могу найти какую-либо документацию по этому вопросу, и нет четкого ответа на github ни в одной из найденных тем. Есть ли надежный подход для angular 8?

Есть несколько аналогичных ответов о переполнении стека, но ни один из них не подходит для моего варианта использования (см .: передача переменных среды в библиотеку angular2 ). Все они объясняют, как использовать forRoot() для передачи конфигурации любому сервису или компоненту библиотеки. Однако мне нужна конфигурация в декораторе библиотечного модуля.

1 Ответ

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

Вы можете передавать внешние данные при загрузке.

В main.ts,

import { browserDynamicPlatform } from '@angular/platform-browser-dynamic';
import { wrappedAppModule } from './app.module';

export function main(myValue: boolean) {
  browserDynamicPlatform().bootstrapModule(wrappedAppModule (myValue));
}

Вы можете обернуть свой ngModule следующим образом.

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

export function wrappedAppModule (myValue) {
  @NgModule({
    imports: [
        !myValue ? StoreDevtoolsModule.instrument() : [],
    ]
  })
  class AppModule { }

  return AppModule;
}

В вашемindex.html,

<script>
  System.import('app')
    .then(module => module.main(envService.data.production),
       console.error.bind(console)
    );
</script>

Надеюсь, это поможет.

...