Как наследовать модуль от другого модуля в 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 { }

есть ли способ сделать это, как это делается с директивы в экспорте[]?

3 ответов


он непосредственно нуждается в доступе к своим собственным WidgetsModule так же, как ему нужен прямой доступ к его собственному FormsModule (так или иначе). Один из способов очистить его, Хотя это экспорт все модули, которые используются в нескольких местах, из SharedModule. Тогда вы можете просто импортировать SharedModule везде

@NgModule({
  exports: [
    FormsModule,
    CommonModule,
    WidgetsModule
  ]
})
class SharedModule {}

не нужно imports их в SharedModule Если сказать, что вы объявляете компонент в SharedModule который использует любой из этих других модули.

тогда во всех ваших других модулях, просто imports на SharedModule. Это заканчивается очисткой его много, и вам нужно только поддерживать один общий модуль.

Читайте Также:


модули не наследуют доступ к компонентам, директивам или каналам, объявленным в других модулях. Какой модуль импорта не имеет отношения к ContactModule и наоборот. Прежде чем ContactComponent может связываться с [(ngModel)], его ContactModule должен импортировать FormsModule.

источник: ngmodule


Я думаю, что это на самом деле не нужно, потому что WidgetsModule это то же самое, что FormsModule (@angular / forms). WidgetsModule-это пользовательский модуль и FormsModule, предоставляемые angular. Это единственная разница. Оба модуля используются для выполнения некоторых функций.

Так что просто подумай о как мы можем объявить FormsModule один раз и использовать его в другие модули, если вы поняли, что проблема разрешенный.

просто вист следующую ссылку один одиночный NgModule против кратных одни с угловым 2