如何用递归组件编译Angular12库?
How to compile Angular 12 library with recursive components?
Tldr:如何使用递归组件编译 angular 库?
Prehistory:我有一个应用程序,其目的是显示复杂的表单。首先,您必须创建一个字段数组,然后将该数组传递给 app-form
组件,它会创建与特定字段类型相对应的组件。像这样:
<div *ngFor="let field of fields">
<app-input *ngIf="item.type === 'input'"></app-input>
<app-checkbox *ngIf="item.type === 'checkbox'"></app-checkbox>
<app-tablist *ngIf="item.type === 'tablist'" [form]="field"></app-tablist>
<app-cardlist *ngIf="item.type === 'cardlist'" [form]="field"></app-cardlist>
...
</div>
这是一个简化的 app-form
模板。如您所见,有基本的字段类型 - 输入、复选框等 - 也有复杂的字段类型 - tablists cardlists。复杂字段在其模板中引用了 app-form
,例如,这里是 tablist 的模板:
<mat-tab-group>
<mat-tab *ngFor="let form_field of form.fields; index as i;">
<mat-card>
<app-form [form]="form_field.value"></app-form>
</mat-card>
</mat-tab>
</mat-tab-group>
有递归组件:form > tablist > form
,它们从未造成过麻烦
现在我需要将 app-form
提取到库中,以便我可以在许多应用程序中使用它。但是当我构建库时它说 “需要创建一个或多个导入循环来编译该组件,当前编译器配置不支持”。我能做些什么吗?
提前致谢
似乎目前 Ivy 无法构建具有递归组件的库,在 angular github 中有一个 issue 关于它。他们说在添加sideEffects: true to library' package.json后应该可以解决问题,但对我来说似乎没有任何效果,所以我最终将所有二级组件移动到父组件:all在模板中具有表单的组件现在在 form.component 文件
中定义
Tldr:如何使用递归组件编译 angular 库?
Prehistory:我有一个应用程序,其目的是显示复杂的表单。首先,您必须创建一个字段数组,然后将该数组传递给 app-form
组件,它会创建与特定字段类型相对应的组件。像这样:
<div *ngFor="let field of fields">
<app-input *ngIf="item.type === 'input'"></app-input>
<app-checkbox *ngIf="item.type === 'checkbox'"></app-checkbox>
<app-tablist *ngIf="item.type === 'tablist'" [form]="field"></app-tablist>
<app-cardlist *ngIf="item.type === 'cardlist'" [form]="field"></app-cardlist>
...
</div>
这是一个简化的 app-form
模板。如您所见,有基本的字段类型 - 输入、复选框等 - 也有复杂的字段类型 - tablists cardlists。复杂字段在其模板中引用了 app-form
,例如,这里是 tablist 的模板:
<mat-tab-group>
<mat-tab *ngFor="let form_field of form.fields; index as i;">
<mat-card>
<app-form [form]="form_field.value"></app-form>
</mat-card>
</mat-tab>
</mat-tab-group>
有递归组件:form > tablist > form
,它们从未造成过麻烦
现在我需要将 app-form
提取到库中,以便我可以在许多应用程序中使用它。但是当我构建库时它说 “需要创建一个或多个导入循环来编译该组件,当前编译器配置不支持”。我能做些什么吗?
提前致谢
似乎目前 Ivy 无法构建具有递归组件的库,在 angular github 中有一个 issue 关于它。他们说在添加sideEffects: true to library' package.json后应该可以解决问题,但对我来说似乎没有任何效果,所以我最终将所有二级组件移动到父组件:all在模板中具有表单的组件现在在 form.component 文件
中定义