1

我有一个名为的库foo,其中包含一个名为的角度组件FooContentComponent,它呈现各种类型的内容:

<ng-container *ngFor="let item of contents">
  <ng-container *ngIf="item.type === 'text'">{{item.text}}</ng-container>
  <ng-container *ngIf="item.type === 'math'">
    <foo-math [formula]="item.formula"></foo-math>
  </ng-continer>
</ng-container>

FooContentComponent有自己的ngModule。同样的FooMathComponent也住在自己的ngModule

这是问题所在:我不想FooMathModule. FooContentModule相反,我想将它留给使用foo库的应用程序来包含FooMathModule如果应用程序想要呈现数学内容。如果应用程序不想呈现数学内容,它将不会FooMathModule在其应用程序模块中导入。

如果我不导入FooMathModule内部,FooContentModule我会从编译器那里得到一个它不知道的错误foo-math。我可以通过在 中指定自定义模式来消除错误FooContentModule,但它仍然不会呈现FooMathComponent.

我可以这样做吗?

4

1 回答 1

1

您不能从应用程序模块的导入/声明/中定位子模块。但是,您可以做的是使用静态方法,例如 Angular 路由器有它的forRoot()

let imports = [standard imports here];

@NgModule({
  imports
})
export FooContentModule {
  // or call it forRoot if you want
  public static withAdditionalImports(additionalImports: any[]) {
    imports.push.apply(imports, additionalImports);

    return FooContentModule;
  }

}

然后你可以在任何模块中使用它

@NgModule({
  imports: [
    FooContentModule.withAdditionalImports(FooMathModule)
  ]
})
export AnyModule {}

请注意,如果您至少执行一次(例如在 AppModule 中),它将在任何地方都可用,因此FooContentModule之后只需导入就足够了

于 2017-03-25T10:13:51.930 回答