我有一个名为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
。
我可以这样做吗?
答案 0 :(得分: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
就足够了