Мне нужно передать провайдеров загруженному модулю Lazy. Контекст: у меня есть модуль, который обращается к API и возвращает некоторые конфиги для визуализации в компонентах. Это Модуль:
@NgModule({
declarations: [AuxTablesComponent, AuxTablesListingComponent],
providers: [AuxTablesService, AuxTableDataResolverGuard],
imports: [CommonModule, AuxTablesRoutingModule, SharedModule]
})
export class AuxTablesModule {}
Импортирован как Ленивый на другой модуль:
const routes: Routes = [
{
path: AIRPORTS_ROUTES.AUX_TABLES.route,
loadChildren: () => import('./aux-tables/aux-tables.module').then(m => m.AuxTablesModule)
}
...
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class AirportsRoutingModule {}
Это работает как брелок. Но теперь мне нужен точно такой же модуль с такими же представлениями и поведением в другом модуле, но мне нужно сменить поставщиков, отвечающих за выборку данных из другого API. Поэтому я хотел бы изменить AuxTablesService и AuxTableDataResolverGuard.
Я пытался что-то вроде этого: импортировать его в другой модуль, в этом случае TrainsModule
const routes: Routes = [
{
path: TRAINS.AUX_TABLES.route,
loadChildren: () => import('./aux-tables/aux-tables.module').then(m => m.AuxTablesModule
.forChild(newApiProvider, newResolverGuard))
}
...
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class TrainsRoutingModule {}
и подготовить AuxTablesModule для получить пользовательских провайдеров, как это:
@NgModule({
declarations: [AuxTablesComponent, AuxTablesListingComponent],
providers: [AuxTablesService, AuxTableDataResolverGuard],
imports: [CommonModule, AuxTablesRoutingModule, SharedModule]
})
export class AuxTablesModule {
static forChild(auxTableApiService: AuxTablesService, auxTableGuardResolver: Resolve<IAuxTable>) {
return {
ngModule: AuxTablesModule,
providers: [
{
provide: AuxTablesService,
useClass: auxTableApiService
},
{
provide: AuxTablesService,
useClass: auxTableGuardResolver
}
]
};
}
}
Но когда angular пытается отрендерить ленивый модуль forChild, я получаю эту ошибку:
core. js: 6014 Ошибка ОШИБКИ: Uncaught (в обещании): Ошибка: не найдено метаданных NgModule для '[объект объекта]'.
Отладка angular, возвращаемый объект не является конструктором и не может быть "разложен" как модуль или не найден мета данные как @ngModule на нем. Кто-нибудь знает, как такое? Как предоставить пользовательские классы для лениво загруженных модулей?