Como usar .forRoot () na hierarquia dos módulos de recursos
Alguém pode me esclarecer como devo estruturar a hierarquia de vários módulos de recursos aninhados com chamadas .forRoot ()?
Por exemplo, e se eu tiver módulos como este:
- MainModule
- SharedModule
- FeatureModuleA
- FeatureModuleA1
- FeatureModuleA2
- FeatureModuleB
Todos os módulos de recursos possuem funções estáticas .forRoot ().
Como devo definirFeatureModuleA de alguma forma "transferir" as funções .forRoot ()?
@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
};
}
}
Posso criar outra classe para uso raiz e configurá-la na função forRoot () do FeatureModuleA:
@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 { }
Mas como posso "transferir" chamadas .forRoot () dentro deste ModuleClass especial?
A meu ver, preciso importar todos os submódulos diretamente para o MainModule raiz e chamar .forRoot () para cada um deles:
@NgModule({
imports: [
FeatureModuleA1.forRoot(),
FeatureModuleA2.forRoot(),
FeatureModuleA.forRoot(),
SharedModule.forRoot()
]
})
class MainModule { }
Estou certo? Antes de responder, consulte este arquivo:https://github.com/angular/material2/blob/master/src/lib/module.ts
Como sei este repo mantido pela equipe angular oficial. Portanto, eles resolvem o problema acima apenas importando todas as chamadas .forRoot () dentro de um módulo MaterialRootModule especial. Eu realmente não entendo como isso seria aplicado ao meu próprio módulo raiz? O que faz oraiz e.forRoot realmente significa aqui? Isso é relativo ao pacote e não ao projeto da Web real?