2

バックエンドからのランダムなマークアップがあり、JiT を使用して実行時にコンパイルする必要があります。このマークアップで使用されるすべてのコンポーネントは、(entryComponents ブロックに追加された) AoT で事前にコンパイルされているため、ランタイムにコンポーネント ファクトリがあります。提供されたマークアップをコンパイルするとき、JiT は既存のコンポーネント ファクトリを無視し、すべての内部コンポーネントを再コンパイルします。
コンポーネントの AoT プリコンパイル済みファクトリを JiT コンパイラに提供して、動的テンプレートを使用して動的コンポーネントを 1 つだけコンパイルする方法はありますか?

コンパイルする必要があるマークアップは次のようになります

<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`
4

0 に答える 0