背景:
- 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';
我知道我来晚了,但供将来参考: 我通过以下方式解决了我的问题:
ng build FormsLibModule
- 将库的模块添加到目标模块和组件文件中,如下所示:
import { FormsLibModule } from 'forms-lib';
注意:VS Code 将此导入显示为错误,但没关系,因为它编译正常。不要尝试对此导入使用自动导入,因为它未在此处列出。