Angular Библиотека - Сервис и объектная модель - PullRequest
1 голос
/ 27 апреля 2020

Я следую этому руководству: https://medium.com/@tomsu / how-to-build-a-library-for- angular -apps-4f9b38b0ed11

для создания библиотеки Angular компонентов, моделей и услуг.

Детали компонентов работают хорошо, и я могу импортировать их в свой целевой проект.

У меня проблемы с моделями и службами.

МОДЕЛИ

Обычно я создаю класс TS для управления данными, полученными из REST API.

Например, я создаю класс D3Dashboard.ts:

    //d3dashboard.ts

export default class D3Dashboard 
    {
        id                      : Number;
        name                    : String;
        reference_name          : String;

        constructor(dict = null)
        {
          if (dict !== null)
          {
            this.id                     = dict["id"];
            this.name                   = dict["name"];
            this.reference_name         = dict["reference_name"];
          }
        }
    }

Затем я импортирую его в publi c -api.ts

export * from './lib/models/D3Dashboard';

. В своем приложении я попытался использовать D3Dashboard:

import { D3Dashboard }                        from 'dashboard3';

, где dashboard3 - это имя библиотеки (например, когда я импортирую компоненты). Компилятор выходит из строя с этой ошибкой:

"export 'D3Dashboard' was not found in 'dashboard3'

Я думаю, что это является следствием проблемы, которая у меня уже есть с другими моделями. В моем основном приложении я всегда импортирую их как:

import MyTsClass from './models/MyTsClass.ts';

Когда я пробовал с этим синтаксисом:

import { MyTsClass } from './models/MyTsClass.ts';

я получаю:

"export 'MyTsClass ' was not found in '../../models/MyTsClass'

УСЛУГИ

Я создаю тестовый сервис:

@Injectable({
  providedIn: 'root'
})
export class DashboardService {

  constructor(private httpClient : HttpClient) { }

  getFoo():Observable<any>
  {
    return this.httpClient.get<any>("http://www.google.it",{ }).pipe(map((response: any) => response));
  }
}

Я включил его в publi c -api.ts:

export * from './lib/service/dashboard.service';

В мое приложение:

import { DashboardService }                   from 'dashboard3';
[...]
   constructor(injector: Injector,
               private dashboard_service: DashboardService ) 
   {
       super(injector);
   }
[...]

 ngOnInit() 
  {
     this.dashboard_service.getFoo().subscribe(
       data => {
           console.log(data);
       },
       err => {
           console.log("we gonna die");
       });

Я получаю эту ошибку:

ERROR Error: Uncaught (in promise): NullInjectorError: StaticInjectorError(AppModule)[HomePageComponent -> DashboardService]:

--------------------- ----------- ОБНОВЛЕНИЕ: ------------------------- -------

В ожидании окончательного ответа я выясняю решение проблемы с моделями и получаю новую ошибку для обслуживания:

О моделях, я имею удалил "default" из класса экспорта, как предложено, а затем изменил эту строку в publi c .api.ts:

// models
export { D3Dashboard } from './lib/models/D3Dashboard';

Теперь D3Dashboard доступна в главном приложении с:

import { D3Dashboard }                           from '@d3/common';

Что касается сервиса, я импортировал HttpClientModule в библиотеку app.module и добавил сервис в массив провайдера:

import { HttpClientModule }       from '@angular/common/http';

@NgModule({
  declarations: [DashSettingsComponent],
  imports: [
    HttpClientModule,
  ],
  exports: [ DashSettingsComponent ],
  providers: [ DashboardService ],
})
export class D3CommonModule { }

В моем приложении я получаю эту ошибку сейчас:

ERROR Error: Uncaught (in promise): NullInjectorError: StaticInjectorError(AppModule)[HttpHandler -> Injector]:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...