2016-10-07 5 views
10

Поэтому я использую Угловой 2 финал (2.0.0) и, скажем, я создать WidgetsModule с кучей директив и компонентов, которые помогут мне построить мое приложение, а затем импортировать его в моем AppModuleКак наследовать модуль из другого модуля в Angular2?

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 { } 

Есть ли способ сделать это, как это сделано с директивами в экспорте []?

ответ

11

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

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

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

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

Смотрите также:

+0

Спасибо. Я вижу это сейчас. Вам действительно нужно импортировать модули в каждый модуль, нет «повторного использования» экземпляров. Нет проблем. Этот SharedModule полезен! Спасибо! – Pstr

0

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

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

Просто Вист по следующей ссылке One single NgModule versus multiples ones with Angular 2

+0

Я не понимаю .. вы говорите о присоединении моих модулей в единое целое, чтобы иметь меньше неоднократный импорт? но это умножает код в модуле слишком много и убивает идею модуляции в Angular2 ... – Pstr

+0

Я занимаюсь «модуляцией», вам нужно создать отдельный модуль «WidgetsModule» и импортировать его в другом модуле так же, как «FormsModule» –

+0

да, но у меня есть отдельный WidgetsModule. вопрос заключался в том, что нужно импортировать его на каждый другой модуль или если он может использоваться совместно с тем же импортом родительского модуля. Но теперь я понимаю, что это не может быть так. Спасибо! – Pstr

3

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

source: ngmodule