Угловые 6 Рабочие пространства CLI. Как создать библиотеку, которая экспортирует услуги
Задний план:
- Угловая CLI 6 представила концепцию рабочих пространств.
- Рабочее пространство может содержать несколько проектов.
- Конфигурация рабочей области и проектов находится в файле "angular.json" в корневой папке рабочего пространства.
- Каждый проект может быть либо приложением, либо библиотекой.
- CLI может генерировать проект, который представляет собой библиотеку с такой командой:
ng generate library forms-lib
- Эта команда создает проект типа "библиотека" с компонентом и сервисом и экспортирует компонент.
Вопрос:
Я пытаюсь, без успеха, создать библиотеку и сделать сервисы в ней доступными для использования в тех приложениях, которые в них нуждаются.
Этот код не работает:
import { NgModule } from '@angular/core';
import { FormsLibComponent } from './forms-lib.component';
import { FormsLibService } from './forms-lib.service';
@NgModule({
imports: [],
declarations: [FormsLibComponent],
exports: [FormsLibComponent, FormsLibService],
})
export class FormsLibModule {
}
Ошибка возврата:
Uncaught Error: Can't export value FormsLibService from FormsLibModule
as it was neither declared nor imported!
Может ли кто-нибудь указать мне в правильном направлении?
Спасибо.
Ответы
Ответ 1
Это может сделать трюк для вас:
import { NgModule, ModuleWithProviders } from '@angular/core';
import { FormsLibComponent } from './forms-lib.component';
import { FormsLibService } from './forms-lib.service';
@NgModule({
declarations: [FormsLibComponent],
exports: [FormsLibComponent],
})
export class FormsLibModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: FormsLibModule,
providers: [FormsLibService]
};
}
}
Ответ 2
Вы можете добавить службы, которые хотите экспортировать, из своей библиотеки, добавив код в public_api.ts
сначала найдите "projects/nameOfLibProject/src/public_api.ts" внутри вашего angular приложения, а затем добавьте
export * from './lib/locationOf/your.service';
Ответ 3
Похоже, вы пропустили добавить свой сервис в массиве провайдеров на модуле.
как
@NgModule({
imports: [],
providers: [FormsLibService],
declarations: [FormsLibComponent, FormsLibService],
exports: [FormsLibComponent, FormsLibService],
})
Ответ 4
Вам необходимо объявить услугу в рамках вашего модуля защиты
import { NgModule } from '@angular/core';
import { FormsLibComponent } from './forms-lib.component';
import { FormsLibService } from './forms-lib.service';
@NgModule({
imports: [],
declarations: [FormsLibComponent, FormsLibService],
exports: [FormsLibComponent, FormsLibService],
})
export class FormsLibModule {
}
Ответ 5
Я знаю, что я опоздал на вечеринку, но для будущих ссылок:
Я получил мое разрешение:
ng build FormsLibModule
- Добавьте модуль библиотеки к целевому модулю и файлам компонентов следующим образом:
import { FormsLibModule } from 'forms-lib';
Примечание: VS Code показывает этот импорт как ошибку, но это не имеет значения, потому что он компилируется нормально. Не пытайтесь использовать авто-импорт для этого импорта, потому что он там не указан.
Ответ 6
Что касается создания библиотеки под angular 8, нам нужно экспортировать сервис в public_api.ts
export * from './lib/components/spinner/spinner.service';