我想动态创建一个模板。应该使用它ComponentType
在运行时构建一个并将其放置(甚至替换)在宿主组件内部的某个位置。
在使用RC4之前ComponentResolver
,使用RC5时会收到以下消息:
ComponentResolver is deprecated for dynamic compilation.
Use ComponentFactoryResolver together with @NgModule/@Component.entryComponents or ANALYZE_FOR_ENTRY_COMPONENTS provider instead.
For runtime compile only, you can also use Compiler.compileComponentSync/Async.
我找到了这个文档(Angular 2同步动态组件创建)
并了解我可以使用
- 一种动态的
ngIf
用ComponentFactoryResolver
。如果我在内部传递了已知组件@Component({entryComponents: [comp1, comp2], ...})
-我可以使用.resolveComponentFactory(componentToRender);
- 实时运行时编译,具有
Compiler
...
但是问题是如何使用它Compiler
?上面的注释说我应该打电话:Compiler.compileComponentSync/Async
-那怎么办?
例如。我想(根据某些配置条件)为一种设置创建这种模板
<form>
<string-editor
[propertyName]="'code'"
[entity]="entity"
></string-editor>
<string-editor
[propertyName]="'description'"
[entity]="entity"
></string-editor>
...
在另一种情况下,这个(string-editor
被替换为text-editor
)
<form>
<text-editor
[propertyName]="'code'"
[entity]="entity"
></text-editor>
...
依此类推(editors
根据属性类型使用不同的数字/日期/引用,为某些用户跳过某些属性...)。即,这是一个示例,实际配置可以生成更多不同和复杂的模板。
模板正在更改,因此我无法使用ComponentFactoryResolver
和传递现有模板...我需要使用解决方案Compiler
。
这是从服务器生成的动态Form控件的示例。
https://stackblitz.com/edit/angular-t3mmg6
此示例是动态的Form控件位于添加组件中(您可以在此处从服务器获取Formcontrols)。如果看到addcomponent方法,则可以看到窗体控件。在此示例中,我没有使用角形材料,但是它可以工作(我使用@ work)。这是角度6的目标,但适用于所有以前的版本。
需要为AngularVersion 5及更高版本添加JITComplierFactory。
谢谢
维杰