AOT angular e JIT no mesmo projeto

No angular5, tento ter no mesmo projeto a compilação AOT para a maior parte do meu módulo / componente ... mas tenho uma parte que precisa ser compilada pelo JIT.

Para esta segunda parte, o HTML vem da solicitação do Ajax e contém algumas tags de componentes que devem ser compiladas por angular. Para gerenciar esta parte, uso uma diretiva que se parece com:

export class ArticleLiveDirective implements OnInit, OnChanges, OnDestroy {

    // [...]    

    constructor(
        private container: ViewContainerRef,
        private compiler: Compiler
    ) { }

    // [...]

    private addHtmlComponent(template: string, properties: any = {}) {
        this.container.clear();
        //Force always rootDomElement.
        const divTag = document.createElement('div');
        divTag.setAttribute('id',this.currentId);
        divTag.innerHTML = template;
        template = divTag.outerHTML;

        // We create dynamic component with injected template
        @Component({ template })
        class ArticleLIveComponent implements OnInit, OnChanges, OnDestroy {
            constructor(
                private articleService: ArticleService
            ) {}
            ngOnInit() {}
            ngOnChanges(changes: SimpleChanges) {}
            ngOnDestroy() {}
            goToPage($event: Event, pagination: string) {
                this.articleService.askToChangeArticle(pagination);
                //Stop propagation
                $event.stopPropagation();
                return false;
            }

        }

        // we declare module with all dependencies
        @NgModule({
            declarations: [
                ArticleLIveComponent
            ],
            imports: [
                BrowserModule,
                MatTabsModule
            ],
            providers: []
        })
        class ArticleLiveModule {}

        // we compile it
        const mod = this.compiler.compileModuleAndAllComponentsSync(ArticleLiveModule);
        const factory = mod.componentFactories.find((comp) =>
            comp.componentType === ArticleLIveComponent
        );
        // fetch instance of fresh crafted component
        const component = this.container.createComponent(factory);
        // we inject parameter.
        Object.assign(component.instance, properties);
    }
}

Como você pode ver, eu posso ligaraddHtmlComponent método para compilar novo componente em tempo de execução com HTML personalizado como modelo.

Meu modelo se parece com:

<div>
<h2>Foo bar</h2>
<mat-tab-group>
  <mat-tab label="Tab 1">Content 1</mat-tab>
  <mat-tab label="Tab 2">Content 2</mat-tab>
</mat-tab-group>
<p>Other content</p>

tudo funciona perfeitamente até que eu mude para a compilação AOT (fyi eu uso:https://github.com/angular/angular-cli/tree/master/packages/%40ngtools/webpack)

Razao possivel : Principal razão, eu acho, é porque a compilação AOT exclui parte do "compilador" do Angular do pacote compilado de saída.O que eu tenho que tentar - Tentei solicitá-lo diretamente no meu código, mas ainda não está presente. - Tentei verificar como um site como o angular (ou material angular) lida com ele. Mas não está de acordo com o meu caso. De fato, ambos já compilaram a versão de todos os exemplos na versão AOT. Parte dinâmica é "apenas" conteúdo em torno da amostra.

Se você deseja verificar como o material é angular: Todos os exemplos de sites para cada componente:https://github.com/angular/material2/tree/master/src/material-examples

Então eles têm carregador:https://github.com/angular/material.angular.io/blob/master/src/app/shared/doc-viewer/doc-viewer.ts#L85

Pode ser a maneira certa de fazê-lo, mas não sei como adaptá-lo para gerenciar o conteúdo dinâmico da guia.

EDITAR : eu adicionei amostra aqui:https://github.com/yanis-git/aot-jit-angular (filial Master)

Como você verá, a compilação AOT remove o compilador de parede do pacote, este resultado:

Module not found: Error: Can't resolve '@angular/compiler/src/config'

Eu tentei forçar o compilador Factory no AppModule, mas ainda não obtive resultado.

Eu tenho outro exemplo no mesmo repositório, mas no ramo "lazy-jit", agora tenho o Compiler incorporado no pacote de saída, mas um novo erro ocorre:

ERROR Error: No NgModule metadata found for 'ArticleLiveModule'.

Quem parece ser exatamente igual a este problema:https://github.com/angular/angular/issues/16033

questionAnswers(2)

yourAnswerToTheQuestion