Как выставить много компонентов 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 не был импортирован в определение модуля. Я ожидал бы, что операторы как библиотека должны содержать больше, чем корневые классы.