我有一个来自后端的随机标记,应该在运行时使用 JiT 编译。此标记中使用的每个组件都已使用 AoT 预编译(添加到 entryComponents 块),因此在运行时具有组件工厂。当 JiT 编译提供的标记时,它会忽略现有的组件工厂并重新编译每个内部组件。
有什么方法可以将组件的 AoT 预编译工厂提供给 JiT 编译器,以仅使用动态模板编译一个动态组件?
应该编译的标记看起来像这样
<exercise1 smth="smth">
<exercise1-answer>smth</exercise1-answer>
</exercise1>
<some-wrapper-cmp>
<exercise2 smth="smth">
<exercise2-answer>smth</exercise2-answer>
</exercise2>
</some-wrapper-cmp>
任意嵌套(常规标记可以包含 1500-2000 个 DOM 节点)
ps 我正在使用这种方式通过 AoT 获取 JiT https://github.com/angular/angular/issues/15510#issuecomment-294301758然后就
const component = Component({ template })(class {});
const module = NgModule({ imports, declarations: [ component ], schemas })(class {});
this.compiler.compileModuleAndAllComponentsAsync(module)
.then(factories => factories.componentFactories.filter(factory => factory.componentType === component)[0])
.then(componentFactory => {
this.componentRef = this.viewContainerRef.createComponent(
componentFactory,
null,
this.viewContainerRef.injector
);
this.compilationEnd.emit();
});`enter code here`