Динамическое объявление компонентов в NgModule с обещанием - PullRequest
0 голосов
/ 30 октября 2019

Мне нужно динамически объявлять некоторые компоненты в NgModule после внутреннего вызова.

Я уже пробовал различные решения, например, импорт во время выполнения с import api, но затем я должен использовать его в динамически генерируемоммаршрутизация и, кажется, не работает. Это пока лучшее решение, но оно все еще не работает:

app.module:

export function configFactory(componentLoader: ComponentLoaderService) {
  return () => componentLoader.loadComponents();
}
const componentsToLoad = ComponentLoaderService.components;
@NgModule({
  providers: [
    {
      provide: APP_INITIALIZER,
      useFactory: configFactory,
      deps: [ComponentLoaderService],
      multi: true,
    }
  ],
  declarations: [
    AppComponent,
    ...componentsToLoad
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    DynamicModule.withComponents(componentsToLoad)
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

ComponentLoaderService:

@Injectable({
  providedIn: 'root'
})
export class ComponentLoaderService {

  static components = [];
  constructor() {
  }

  public static getComponents() {
    console.log(this.components); //<--- here
    return this.components;
  }
  public loadComponents() {
    setTimeout(() => {
      ComponentLoaderService.components.push(AppComponent);
    }, 5000);
  }

}

Проблема в том, чтоgetComponents вызывается перед завершением loadComponent. Как я могу сделать это синхронно или существует другой способ, чтобы объявить, чтобы объявить их, может быть, во время выполнения? Существует ли другой способ запуска cod перед APP_INITIALIZER?

Спасибо за внимание

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...