如何从库中公开许多Angular 2组件->缺少CommonModule

时间:2018-07-25 08:24:42

标签: angular shared-libraries angular-cli-v6

我的目标是在单独的Angular工作区/代码存储库中创建Angular库,以服务外部Angular项目。 我想适当地组织此活动,因为该生态系统将持续很长时间并且会扩展。

到目前为止,我已经能够通过导出主机模块来暴露组件,并使用前端项目中的模板使用其标签。 现在,我需要直接从路由中使用其中的某些组件,然后需要在模块/路由类中显式导入每个组件。

为此,我需要从库中导出组件,而这正是我一直在努力的地方。当我尝试从模块类中导出它们时,没有任何错误,但是它们没有公开公开为类型(但是在导入lib模块时,我可以从模板中使用它们的标签)。唯一公开的类型是:

  • [LibName]组件
  • [LibName]服务
  • [LibName]模块

哪个是从我的lib项目中的文件“ public_api.ts”导出的。

export * from './lib/my-lib.service';
export * from './lib/my-lib.component';
export * from './lib/my-lib.module';

好吧,然后我认为将导出添加到该文件中以查找缺少的组件将达到目的,但事实并非如此。我在构建时遇到此错误

Cannot determine the module for class MyComponent in [path]! Add MyComponent to the NgModule to fix it.

知道组件在模块中 报关和出口:

@NgModule({
    imports: [ ],
    declarations: [ [ProjectName]Component, MyFirstComponent, MySecondComponent],
    exports: [ [ProjectName]Component, MyFirstComponent, MySecondComponent ],
})

1 个答案:

答案 0 :(得分:0)

我在写问题时找到了解决方案..呵呵。

所以我发布是为了帮助别人。

我只是在模块定义中缺少CommonModule导入:

import { CommonModule } from '@angular/common';

@NgModule({
    imports: [ CommonModule ], // <-- add this
    declarations: [ [ProjectName]Component, MyFirstComponent, MySecondComponent],
    exports: [ [ProjectName]Component, MyFirstComponent, MySecondComponent ],
})

我使用Angular CLI 6创建库的节点如下:

ng generate library my-library --prefix ml

结果是,CommonModule没有导入到模块定义中。我本来希望语句作为库应该承载的比根类更多。