Я не чувствую, что в вашем вопросе достаточно информации, чтобы дать вам точный ответ на проблему, с которой вы сталкиваетесь.
Я смог найти решение с тем, что я считаюаналогично вашей настройке, которую вы могли бы использовать для решения вашей проблемы или для того, чтобы задать более острый вопрос.
TLDR: полное репозиторий GitHub здесь
Я создал структуру приложения каквыглядит следующим образом:
app/
app.module
app.component
/dynamic-provider --contains component that is dynamically loading other components
--module is lazy loaded by dynamic-one module
dynamic-loader.module
slot.component
/dynamic-one --contains lazy loaded module
--module is lazy loaded by app module
dynamic-one.module
/dynamic-loader --contains a component to be dynamically loaded
dynamic-provider.module
one.component
provider.service
app.module выглядит следующим образом
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
RouterModule.forRoot([
{ path: 'dynamic-loader', loadChildren: './dynamic-one/dynamic-one.module#DynamicOneModule' },
{ path: '', component: AppComponent }
])
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
dynamic-one.module выглядит следующим образом
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', loadChildren: '../dynamic-loader/dynamic-loader.module#DynamicLoaderModule' }
])
]
})
export class DynamicOneModule {
constructor() {
console.log('one');
}
}
dynamic-loader.module выглядит следующим образом
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { DynamicProviderModule } from '../dynamic-provider/dynamic-provider.module';
import { SlotComponent } from './slot.component';
@NgModule({
declarations: [ SlotComponent ],
imports: [
DynamicProviderModule,
RouterModule.forChild([
{ path: '', component: SlotComponent }
])
]
})
export class DynamicLoaderModule { }
dynamic-provider.module выглядит следующим образом
import { NgModule } from '@angular/core';
import { OneComponent } from './one.component';
import { ProviderService } from './provider.service';
@NgModule({
declarations: [ OneComponent ],
entryComponents: [ OneComponent ],
exports: [ OneComponent ],
providers: [ ProviderService ]
})
export class DynamicProviderModule { }
Как вы утверждаете, динамическое создание компонентов работает, когда модуль не работаетзагружен, так что я не включил этот код здесь (хотя он находится в репо для полноты).Однако, как можно увидеть здесь, модуль приложения лениво загружает модуль dynamic-one, который, в свою очередь, лениво загружает модуль динамического загрузчика.Модуль динамического загрузчика динамически создает компоненты из модуля динамического провайдера.
Чем это отличается от вашей реализации, очень трудно сказать, поскольку вы предоставили только небольшой объем информации.Я надеюсь, что это поможет вам найти недостающую часть, которую вы ищете, хотя!