モジュールとコンポーネントをオンザフライで作成し、デコレータを適用してからコンパイルすることができます。あなたは、実行時にコンパイラを持参する必要が動作するように、このアプローチのために
@ViewChild('vc', {read: ViewContainerRef}) vc: ViewContainerRef;
constructor(private _compiler: Compiler,
private _injector: Injector,
private _m: NgModuleRef<any>) {
}
ngAfterViewInit() {
const template = '<span>generated on the fly: {{name}}</span>';
const tmpCmp = Component({template: template})(class {
});
const tmpModule = NgModule({declarations: [tmpCmp]})(class {
});
this._compiler.compileModuleAndAllComponentsAsync(tmpModule)
.then((factories) => {
const f = factories.componentFactories[0];
const cmpRef = f.create(this._injector, [], null, this._m);
cmpRef.instance.name = 'dynamic';
this.vc.insert(cmpRef.hostView);
})
}
:その後、コンパイル済みのコンポーネントにアクセスすることができるようになります。
:動的コンポーネントの詳細については記事を読みます