我需要将提供者传递给延迟加载的模块。
上下文:
我有一个模块,用于访问 API 并返回一些配置以在组件中呈现。
这是该模块:
@NgModule({
declarations: [AuxTablesComponent, AuxTablesListingComponent],
providers: [AuxTablesService, AuxTableDataResolverGuard],
imports: [CommonModule, AuxTablesRoutingModule, SharedModule]
})
export class AuxTablesModule {}
在另一个模块中作为延迟加载(Lazy)导入:
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 ERROR Error: Uncaught (in promise): Error: No NgModule metadata found for '[object Object]'。
调试Angular时,返回的Object不是构造函数,不能将其作为模块进行“工厂化”,也无法在其上找到@ngModule的元数据。有人知道如何做到这一点吗?例如向懒加载的模块提供自定义类?