Я следую этому руководству: 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]: