我正在解决如何动态创建API接收的组件的问题。为我工作的解决方案是
private addComponent(template: string) {
@Component({template: template})
class TemplateComponent {}
@NgModule({declarations: [TemplateComponent], imports: [BlogAppModule]})
class TemplateModule {}
const mod = this.compiler.compileModuleAndAllComponentsSync(TemplateModule);
const factory = mod.componentFactories.find((comp) =>
comp.componentType === TemplateComponent
);
this.blogAppRef = this.container.createComponent(factory);
}
参考:Angular2 - Dynamic components in content received by API
现在,无论何时调用此函数,它都会创建一个新的ng-component,组件只会堆叠在另一个上面。现在,我使用此删除代码:
...
if (this.blogAppRef) {
this.blogAppRef.destroy();
}
this.blogAppRef = this.container.createComponent(factory);
}
工作正常。但我的问题是,这可以做得更好吗? 这个解决方案有一些重要的缺点吗? (存储器/功率)
我无法找到如何更新此类动态创建的组件。它需要新编译的组件来替换前一个组件;更准确地说,替换ng-content的内部部分。
谢谢!