Как выставить много компонентов Angular 2 из библиотеки -> отсутствует CommonModule

Моя цель - создать библиотеки Angular в отдельных репозиториях Angular Workspaces / code для обслуживания внешних проектов Angular. Я хочу организовать это должным образом, так как экосистема будет длиться долго и в масштабе.

До сих пор мне удавалось выставлять компоненты, экспортируя их хостинг-модуль и используя их тег из шаблонов в фронт-проектах. Теперь мне нужно использовать некоторые из этих компонентов непосредственно из маршрутизации, затем мне нужно явно импортировать каждый из этих компонентов в класс module / routing.

Для этого мне нужно экспортировать компоненты из библиотеки, и вот где я борюсь. Когда я пытаюсь экспортировать их из класса модуля, у меня нет ошибок, но они не отображаются публично как типы (но я могу использовать их теги из шаблонов, когда импортируется модуль lib). Доступны только следующие типы:

  • [Имя_библиотека] Компонент
  • [Имя_библиотека] Услуги
  • [Имя_библиотека] Модуль

Которые экспортируются из файла "public_api.ts" в моем проекте lib.

export * from './lib/my-lib.service';
export * from './lib/my-lib.component';
export * from './lib/my-lib.module';

Хорошо, тогда я подумал, что добавление экспорта в этот файл для отсутствующих компонентов поможет, но это не так. Я получаю эту ошибку при сборке

Cannot determine the module for class MyComponent in [path]! Add MyComponent to the NgModule to fix it.

Зная, что компоненты находятся в декларации и экспорте модуля:

@NgModule({
    imports: [ ],
    declarations: [ [ProjectName]Component, MyFirstComponent, MySecondComponent],
    exports: [ [ProjectName]Component, MyFirstComponent, MySecondComponent ],
})

1 ответ

Я нашел решение во время написания вопроса.. да..

Так что выкладываю на случай, если кому-то это поможет

Я просто пропустил импорт CommonModule в моем определении модуля:

import { CommonModule } from '@angular/common';

а также

@NgModule({
    imports: [ CommonModule ], // <-- add this
    declarations: [ [ProjectName]Component, MyFirstComponent, MySecondComponent],
    exports: [ [ProjectName]Component, MyFirstComponent, MySecondComponent ],
})

Узел, который я создал библиотеку с помощью Angular CLI 6, выглядит следующим образом:

ng generate library my-library --prefix ml

В результате CommonModule не был импортирован в определение модуля. Я ожидал бы, что операторы как библиотека должны содержать больше, чем корневые классы.

Другие вопросы по тегам