我想要一个可配置的加载模块。理论上,我希望一个本身更大的应用程序的模块能够接收一些配置。根据主应用程序发送的配置显示/加载某些元素。
我将其与其他模块一起使用,但那些不是延迟加载的模块。我尝试并四处搜索,但没有看到类似的用法:
children: [
{
path: 'application-module',
loadChildren: () => import('@application-module').then(m => m.ApplicationModule.forRoot({
foo:'bar'
}))
}
]
这可能吗?如果我使用它,我会收到错误
error: Error: No NgModule metadata found for '[object Object]'.
当您加载的模块未定义时,这种情况很常见。
或者我走错了路,有更好的解决方案吗? 谢谢你
我想你可以尝试一件事,因为你现在所做的事情是行不通的。原因是 loadChildren 需要一个带有 @module 装饰器的类。
你给它的是一个静态函数。
你可以尝试这样做:
children: [
{
path: 'application-module',
loadChildren: () => import('@application-module').then(m => { m.ApplicationModule.forRoot({foo: 'bar'}); return m.ApplicationModule; } )
}))
}
]
我不知道这是否有效。
另一种选择是寻求服务或通过接收延迟加载模块路由中的路由。
如果模块在您的代码中,只需更改函数返回
@Module({})
export class ApplicationModule {
static forRoot(): typeof ApplicationModule {
return this;
}
}
就我而言,我想出了另一种使用模块工厂的方法:
export const applicationModuleFactory = config => {
@Module({
/* Setup module as we want, based on `config` argument */
})
class ApplicationModule {}
return ApplicationModule;
};
// Usage
const routes: Routes = [
{
path: '',
loadChildren: () => import('@application-module').then(m => m.applicationModuleFactory({ foo: 'bar' }))
}
];