Рендеринг компонентов без явной зависимости в ngModule
У меня есть библиотека под названием 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
,
Я могу это сделать?
1 ответ
Вы не можете ориентироваться на подмодули из импорта / объявлений / модуля / модуля приложения. Однако вы можете использовать статический метод, например, у Angular router 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
впоследствии