Angular 6 CLI工作区。如何创建导出服务的库

时间:2018-05-25 17:52:48

标签: angular angular-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!

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

谢谢。

6 个答案:

答案 0 :(得分:3)

这可能适合你:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

好像您错过了将服务添加到模块上的providers数组中一样。 喜欢

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

答案 3 :(得分:0)

我知道我参加晚会很晚,但是为了将来参考: 我的解决方法是:

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

从“ forms-lib”导入{FormsLibModule};

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我的问题是: 在导入语句中,我选择了(Webstorm)自动完成功能给我的东西,大致相当于

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

相反,我只需要使用库名:

import {FormsLibModule} from 'forms-lib';

(注意:我有一个包含该库以及对其进行测试的应用程序的工作区)

相关问题