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?

questionAnswers(3)

yourAnswerToTheQuestion