2017-01-09 4 views
7

У меня есть сомнения в том, как делиться компонентами между модулями в Angular 2. Дело в том, что у меня есть два модуля в приложении, «Модуль клиентов» и «Модуль поставщиков».Как делиться компонентами между модулями в угловом 2?

Оба этих модуля в своих компонентах используют AddressComponent и EmailComponent. Они также используют интерфейсы Address и Email.

Теперь у меня много дублирования, потому что я скопировал и вставил эти компоненты и интерфейсы на оба модуля. Это очевидно просто неправильно.

Мне нужен способ импорта тех компонентов, которые будут использоваться на обоих модулях. Но я не знаю, как это сделать.

Должен ли я создать другой модуль для этого общего материала и импортировать его в обоих? Каков правильный способ обмена компонентами между модулями в Angular 2?

ответ

9

Создать общий NgModule, который будет иметь общий характер Component/Service/Pipe. Поступая таким образом, вы избежите дублирования кода. Он сделает код модульным, подключаемый к модулю &.

Для того, чтобы использовать AddressComponent & EmailComponent в других модулях, необходимо export их из общего модуля:

Код

@NgModule({ 
    imports: [CommonModule], 
    declarations: [AddressComponent, EmailComponent], 
    providers: [MySharedService], 
    exports: [AddressComponent, EmailComponent], 
}) 
export class SharedModule() { } 

Потребляя SharedModule, все, что вам нужно сделать, это импорт SharedModule

@NgModule({ 
    imports: [CommonModule, SharedModule, ... ], 
    providers: [..] 
}) 
export class CustomersModule() { } 
+1

Я не думаю, что это работает, не может объявить компоненты дважды: http://stackoverflow.com/a/39927548/777285 –

+0

@ArnaudP спасибо за хедз-ап, я удалил избыточную декларацию, спасибо;) –

+0

На самом деле это иначе: SharedModule должен быть единственным, объявляющим компонент (ы). А потребителям нужно импортировать SharedModule. –