谁能告诉我如何使用.forRoot()调用构造多个嵌套的功能模块层次结构?
例如,如果我有这样的模块怎么办:
- MainModule
- SharedModule
- FeatureModuleA
- FeatureModuleA1
- FeatureModuleA2
- FeatureModuleB
所有功能模块都具有.forRoot()静态函数。
如何以某种方式“转移” .forRoot()函数来定义FeatureModuleA?
@NgModule({
imports: [
//- I can use .forRoot() calls here but this module not the root module
//- I don't need to import sub-modules here, FeatureA only a wrapper
//FeatureModuleA1.forRoot(), //WRONG!
//FeatureModuleA2.forRoot(), //WRONG!
],
exports: [
//I cannot use .forRoot() calls here
FeatureModuleA1,
FeatureModuleA2
]
})
class FeatureModuleA {
static forRoot(): ModuleWithProviders {
return {
//At this point I can set any other class than FeatureModuleA for root
//So lets create a FeatureRootModuleA class: see below!
ngModule: FeatureModuleA //should be: FeatureRootModuleA
};
}
}
我可以为根使用创建另一个类,然后在FeatureModuleA的forRoot()函数中进行设置:
@NgModule({
imports: [
//Still don't need any sub module within this feature module
]
exports: [
//Still cannot use .forRoot() calls but still need to export them for root module too:
FeatureModuleA1,
FeatureModuleA2
]
})
class FeatureRootModuleA { }
但是,如何在此特殊的ModuleClass中“转移” .forRoot()调用?
如我所见,我需要将所有子模块直接导入到我的根MainModule中,并为每个子模块调用.forRoot():
@NgModule({
imports: [
FeatureModuleA1.forRoot(),
FeatureModuleA2.forRoot(),
FeatureModuleA.forRoot(),
SharedModule.forRoot()
]
})
class MainModule { }
我对吗?在回答之前,请先查看以下文件:https : //github.com/angular/material2/blob/master/src/lib/module.ts
据我所知,这个仓库由官方的角度小组维护。因此,他们只需在特殊的MaterialRootModule模块中导入所有.forRoot()调用即可解决上述问题。我不太了解如何将其应用于我自己的根模块?什么是根和.forRoot的真正含义吗?这是相对于软件包而不是实际的Web项目吗?
通常forRoot
用于添加应用程序/单个服务。
@NgModule({
providers: [ /* DONT ADD HERE */ ]
})
class SharedModule {
static forRoot() {
return {
ngModule: SharedModule,
providers: [ AuthService ]
}
}
}
其理由是,如果添加AuthService
到providers
在@NgModule
,有可能为一个以上的被创建,如果您导入SharedModule
到其他模块。
当将SharedModule
导入到一个急切加载的模块中时,我不是100%清楚是否会创建该服务,但是提到的文档的解释是关于延迟加载的模块的。延迟加载模块时,将创建所有提供程序。
出于这个原因,我们添加了一个(按惯例)forRoot
方法,以表示该方法仅应在根(应用)模块中调用,而在其他模块中,应仅正常导入该方法。
@NgModule({
imports: [SharedModule]
})
class FeatureModule {}
@NgModule({
imports: [SharedModule.forRoot()]
})
class AppModule {}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句