角度 6 CLI 工作区.如何创建导出服务的库



背景:

  • Angular 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!

有人可以指出我正确的方向吗?

谢谢。

您可以通过向public_api.ts中添加一些代码来添加要从库中导出的服务。

首先在角度应用程序中找到projects/nameOfLibProject/src/public_api.ts,然后添加

export * from './lib/locationOf/your.service';

这可能会为您解决问题:

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]
};
}
}

似乎您错过了在模块上的提供程序数组中添加服务。

@NgModule({
imports: [],
providers: [FormsLibService],
declarations: [FormsLibComponent, FormsLibService],
exports: [FormsLibComponent, FormsLibService],
})

我的问题是: 在导入语句中,我选择了(Webstorm(自动完成给我的内容,这大致相当于

import {FormsLibModule} from 'forms-lib/lib/forms-lib.module';

相反,我必须只使用库名称:

import {FormsLibModule} from 'forms-lib';

(注意:我有一个工作区,其中包含库以及测试它的应用程序(

就考虑在角度 8 下创建库而言,我们需要在 public_api.ts 中导出服务export * from './lib/components/spinner/spinner.service';

我知道我来晚了,但供将来参考: 我通过以下方式解决了我的问题:

  1. ng build FormsLibModule
  2. 将库的模块添加到目标模块和组件文件中,如下所示:

import { FormsLibModule } from 'forms-lib';

注意:VS Code 将此导入显示为错误,但没关系,因为它编译正常。不要尝试对此导入使用自动导入,因为它未在此处列出。

相关内容

最新更新