Как наследовать модуль из другого модуля в Angular2?
Итак, я использую Angular 2 final (2.0.0) и скажу, что создаю WidgetsModule с кучей директив и компонентов, которые помогут мне создать мое приложение, а затем импортировать его в свой AppModule
import { NgModule } from '@angular/core';
import { UniversalModule } from 'angular2-universal';
import { WidgetsModule } from '../../../widgets';
import { App, appRouting } from './';
@NgModule({
imports: [
UniversalModule,
WidgetsModule,
appRouting
],
providers: [ AppPresenter ],
declarations: [ App ],
exports: [ ],
bootstrap: [ App ]
})
export class AppModule { }
Затем я хочу использовать виджеты в дочерних модулях, например HomeModule, CartModule и т.д. Как я могу сделать виджеты доступными без необходимости импортировать WidgetsModule в каждый другой модуль?
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { WidgetsModule } from '../../../widgets';
import { Cart, cartRouting } from './';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
WidgetsModule, //<-- I want to avoid doing this in every module
cartRouting
],
providers: [ ],
declarations: [ Cart ]
})
export class CartModule { }
Есть ли способ сделать это, как это делается с директивами в экспорте []?
Ответы
Ответ 1
Ему непосредственно необходим доступ к его собственному WidgetsModule
, так же как ему нужен прямой доступ к нему FormsModule
(так или иначе). Один из способов его очистки - это экспортировать все модули, которые используются в разных местах, от SharedModule
. Затем вы можете просто импортировать SharedModule
всюду
@NgModule({
exports: [
FormsModule,
CommonModule,
WidgetsModule
]
})
class SharedModule {}
Вам не нужно imports
добавить любой из них в SharedModule
, если вы не объявите компонент в SharedModule
, который использует любой из этих других модулей.
Затем во всех остальных модулях просто imports
SharedModule
. Это заканчивает тем, что очищает его много, и вам нужно только поддерживать один общий модуль.
См. также:
Ответ 2
Модули не наследуют доступ к компонентам, директивам или каналам, объявленным в других модулях. Импорт AppModule не имеет отношения к ContactModule и наоборот. Прежде чем ContactComponent может связываться с [(ngModel)], его ContactModule должен импортировать FormsModule.
source: ngmodule
Ответ 3
Я думаю, что на самом деле это не нужно, потому что WidgetsModule совпадает с FormsModule (@ angular/forms). WidgetsModule - это пользовательский модуль и FormsModule, предоставляемый angular. Это единственное различие. Оба этих модуля используются для выполнения некоторых функций.
Так что просто подумайте о том, как мы можем объявить FormsModule один раз и использовать его во всем другом модуле, если вы понимаете, что тогда проблема решена.
Просто просмотрите следующую ссылку Один единственный NgModule и кратный с Angular 2