Может ли кто-нибудь пояснить мне, как мне структурировать иерархию нескольких вложенных функциональных модулей с вызовами .forRoot()?Как использовать .forRoot() в иерархии функциональных модулей
Например, что если у меня есть такие модули, как это:
- MainModule
- SharedModule
- FeatureModuleA
- FeatureModuleA1
- FeatureModuleA2
- FeatureModuleB
Все модули функций имеет .forRoot() статические функции.
Как определить FeatureModuleA с каким-либо образом «передать» функции .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
};
}
}
я могу создать еще один класс для использования корневой затем установить его в forRoot() функцию 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 { }
Но как я могу "передача" .forRoot() вызывает в этом специальный ModuleClass?
Как я вижу, что нужно импортировать все суб-модулей непосредственно в мой корневой 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
Как я знаю, это репо поддерживается официальной угловой командой. Поэтому они решают вышеупомянутое, просто импортируя все вызовы .forRoot() в специальном модуле MaterialRootModule. Я действительно не понимаю, как это будет применяться для моего собственного корневого модуля? Что означает корень и .forRoot действительно означает здесь? Это относительно пакета, а не фактического веб-проекта?
Я не уверен, почему вы хотите создать и использовать метод 'forRoot'. Возможно, это помогает: https://angular.io/docs/ts/latest/guide/ngmodule.html – mxii
Да. Я прочитал официальную документацию. Там нет ничего о том, как структурировать сложные проекты с несколькими вложенными модулями. Я хочу создать и использовать forRoot именно потому, что синглеты провайдеров должны быть установлены только один раз во всем проекте. – ggabor
Хорошо, потому что в вашем примере не было провайдеров. :) – mxii