5

我创建了一个 Angular 库。在我的库中,我希望通过在其中包含功能模块来使其干净:

例子:

Library
  NavigationModule
    NavigationSideBarComponent
    NavigationTopComponent
    Navigation Service
    etc

  GraphModule
    BarGraphComponent
    PieGraphComponent

我的导航模块目前看起来像这样:

@NgModule({
  declarations: [
    NavigationSidebarComponent
  ],
  imports: [
    CommonModule,
    MatSidenavModule
  ],
  exports: [
    NavigationSidebarComponent
  ]
})
export class NavigationModule { }

我的图书馆模块目前看起来像这样:

@NgModule({
  declarations: [LibraryComponent],
    imports: [
      NavigationModule
    ],
    exports: [
      LibraryComponent
      //NavigationSidebarComponent  <-- Did not work
    ]
 })
 export class LibraryModule { }

我发现的大多数教程都是使用一个只有组件的库,而没有其他东西,比如模块。我发现在库中使用模块的教程没有显示如何导出片段。

本质上,我想将此库导入任何应用程序,并能够NavigationSidebarComponent从库或服务中的模块调用或任何其他组件。

我会继续研究这个。

4

2 回答 2

5

您必须在 中导出NavigationModuleLibraryModule而不是NavigationSidebarComponent

于 2019-01-03T04:28:00.680 回答
4

我认为您根本不需要顶级“库模块”。查看源代码树@angular/material:我认为他们曾经有一个material.module并摆脱了它,现在根只有一个完全空的index.ts. 每个组件都有自己的模块,并且像MatAutocomplete 那样的模块导入它们所依赖的模块(如MatOptionModule)并重新导出它们。

我一直在将我的一个项目转换为类似的模型,并进行研究以找出模块结构的当前最佳实践。我相信 Material 是从“整体库”方法转换而来的,在这种方法中,您被鼓励将import { MatAutocompleteModule } from "@angular/material"每个组件(或一组相关组件)转换为一个模块,因为这种方法允许您将库作为单个包分发,但仍然受益于树-抖动,因此只有实际使用的模块才会包含在您的构建中。

于 2020-09-24T10:22:59.597 回答