@Skrolea

Как использовать компоненту одного модуля в другом?

Добрый день. Делаю модуль уведомлений Notification. Сделал компоненту показа уведомлений и сделал компоненту NotificationBellComponent, которая будет выводить иконку в ToolbarComponent. В модуле NotificationModule сделал экспорт
@NgModule({
  imports: [CommonModule, SharedModule],
  declarations: [NotificationComponent],
  exports: [NotificationComponent,NotificationBellComponent],  
  providers: [NotificationService]
})
. В модуле ToolbaModule сделал
@NgModule({    
    imports: [CommonModule, SharedModule, NotificationModule,NotificationBellComponent],
    declarations: [ToolbarComponent,NotificationBellComponent],
    exports: [ToolbarComponent]
})

В компоненте ToolbarComponent вывожу <sd-notification-bell></sd-notification-bell>
И получаю ошибку
zone.js?1476075322482:355 Unhandled Promise rejection: Template parse errors:
'sd-notification-bell' is not a known element:
1. If 'sd-notification-bell' is an Angular component, then verify that it is part of this module.


Как правильно экспортировать/импортировать компоненты между модулями?
  • Вопрос задан
  • 650 просмотров
Решения вопроса 1
NotificationModule
Вам нужно обязательно объявить NotificationBellComponent в declarations массиве
@NgModule({
  imports: [CommonModule, SharedModule],
  declarations: [NotificationComponent, NotificationBellComponent],
  exports: [NotificationComponent, NotificationBellComponent],  
  providers: [NotificationService]
})

You can export any declarable class — components, directives, and pipes — whether it is declared in this module or in an imported module.

Модули можно экспортировать даже если они не импортированы
You can re-export entire imported modules which effectively re-exports all of their exported classes. A module can even export a module that it doesn't import.

What should I export?

ToolbaModule
1) imports - только для модулей
2) зачем объявлять NotificationBellComponent, если вы его импортируете из модуля NotificationModule
итого ваш модуль
@NgModule({    
    imports: [CommonModule, SharedModule, NotificationModule],
    declarations: [ToolbarComponent],
    exports: [ToolbarComponent]
})

https://plnkr.co/edit/R9pGm6sd8vagd2OepHB4?p=preview
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы