Угловые 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

Я знаю, что я опоздал на вечеринку, но для будущих ссылок: Я получил мое разрешение:

  1. ng build FormsLibModule
  2. Добавьте модуль библиотеки к целевому модулю и файлам компонентов следующим образом:

import { FormsLibModule } from 'forms-lib';

Примечание: VS Code показывает этот импорт как ошибку, но это не имеет значения, потому что он компилируется нормально. Не пытайтесь использовать авто-импорт для этого импорта, потому что он там не указан.

Ответ 6

Что касается создания библиотеки под angular 8, нам нужно экспортировать сервис в public_api.ts export * from './lib/components/spinner/spinner.service';