Мне нужно динамически объявлять некоторые компоненты в 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?
Спасибо за внимание