Quelqu'un peut-il m'expliquer comment structurer la hiérarchie de plusieurs modules de fonctionnalités imbriqués avec les éléments suivants .forRoot()
des appels ?
Par exemple, si j'ai des modules comme celui-ci :
- MainModule
- SharedModule
- FeatureModuleA
- FeatureModuleA1
- FeatureModuleA2
- FeatureModuleB
Tous les modules de fonctionnalités ont un .forRoot()
fonction statique.
Comment dois-je définir FeatureModuleA avec en quelque sorte "transférer" le .forRoot()
fonctions ?
@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
};
}
}
Je peux créer une autre classe pour l'utilisation de Root, puis la définir dans l'application forRoot()
fonction du 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 { }
Mais comment puis-je "transférer"
.forRoot()
dans cette classe de module spéciale ?
Comme je le vois, je dois importer tous les sous-modules directement dans mon module principal racine et appeler .forRoot()
pour chacun d'entre eux :
@NgModule({
imports: [
FeatureModuleA1.forRoot(),
FeatureModuleA2.forRoot(),
FeatureModuleA.forRoot(),
SharedModule.forRoot()
]
})
class MainModule { }
Ai-je raison ? Avant de répondre, jetez un coup d'œil à ce dossier : https://github.com/angular/material2/blob/master/src/lib/module.ts
Comme je le sais, ce dépôt est maintenu par l'équipe officielle d'Angular. Ils ont donc résolu le problème ci-dessus en important simplement tous les fichiers de l'application .forRoot()
dans un module spécial MaterialRootModule. Je ne comprends pas vraiment comment cela pourrait être appliqué à mon propre module Root ? Que fait le Raíz y .forRoot veut vraiment dire ici ? Est-ce que c'est relatif au paquet et non au projet web réel ?
0 votes
Je ne suis pas sûr de la raison pour laquelle vous voulez créer et utiliser une
forRoot
méthode peut-être que ça aide : angular.io/docs/ts/latest/guide/ngmodule.html1 votes
Oui. J'ai lu la documentation officielle. Il n'y a rien sur la façon de structurer des projets complexes avec plusieurs modules imbriqués. Je veux créer et utiliser forRoot exactement parce que les singletons des fournisseurs ne doivent être installés qu'une seule fois dans tout le projet.
0 votes
Ok, parce qu'il n'y avait pas de fournisseurs dans votre exemple :)
0 votes
Ce n'était qu'un exemple pour mettre l'accent sur le vrai problème. D'ailleurs, dans la documentation officielle, il est mentionné que l'on peut créer un module juste pour encapsuler d'autres modules - sans avoir besoin d'aucun fournisseur.