Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

TypeError: Cannot read properties of undefined (reading 'create')

Alguém saberia porque o método create da api ComponentFactory está retornando undefined?

código da classe ModalService

import { ComponentFactory, ComponentFactoryResolver, ComponentRef, Injectable, Injector, TemplateRef } from '@angular/core';
import { ModalConfigInterface } from '../interfaces/modal-config';
import { ModalComponent } from '../modal.component';
import { BodyInjectorService } from '../../services/body-injector';

@Injectable()
export class ModalService {

  private componentFactory: ComponentFactory<ModalComponent>;

  constructor(
    private injector: Injector,
    /**
     *  ComponenteFactoryResolver
     *
     * @description
     *  Ele é capaz de criar fábricas responsáveis pela criação dinâmica de componentes.
     *  Cada fábrica criada pode criar quantos componentes daquele tipo de fábrica.
     */
    componentFactoryResolver: ComponentFactoryResolver,
    private bodyInjector: BodyInjectorService
  ) {
    componentFactoryResolver.resolveComponentFactory(ModalComponent)
  }

  // templateRef: Referencia do template
  // templateRef: refencia do conteudo que precisa estar dentro do modal
  public open(config: ModalConfigInterface): ModalRef {
    const componentRef = this.createComponentRef();
    componentRef.instance.modalConfigI = config;
    console.log(componentRef.instance);
    console.log('open called');
    this.bodyInjector.stackBeforeAppRoot(componentRef);
    return new ModalRef(componentRef);
  }

  private createComponentRef(): ComponentRef<ModalComponent> {
    return this.componentFactory.create(this.injector);
  }
}

/**
 *  ComponentRef e ModalRef
 *
 *  @description
 * O ComponentRef é um artefato com Angular que encapsula
 * uma instância do componente criado dinamicamente. Já ModalRef
 * é uma criação nossa que encapsula um ComponentRef
 * possuindo apenas o método close sem export a referência
 * para o desenvolvedor cliente da nossa API.
 */

export class ModalRef {

  constructor(
    private componentRef: ComponentRef<ModalComponent>
  ) {};

  public close(): void {
    console.log('close called')
    this.componentRef.destroy();
  }
}
1 resposta
solução!

descobri o erro....esqueci de atribuir a variavel componentFactorycomponentFactory no componentFactoryResolver.resolveComponentFactory(ModalComponent)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade linha 13