Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

351
Vistas
¿Cómo esperar que se ejecute ngAfterViewInit() mientras se crea una instancia de un componente a partir de una directiva?

Tengo una directiva que crea en el código una instancia de la plantilla de componente que usa y establece su HTML interno, que cambiará la dimensión de la plantilla:

 var factory = this.resolver.resolveComponentFactory(MyComponentTemplate); this.templateComponent = this.viewContainerRef.createComponent(factory); this.templateComponent.instance.htmlStr = anyText;

Ahora aquí está el problema. En esta etapa, no definiré los tamaños de los componentes:

 console.log(this.templateComponent.instance.width); //undefined console.log(this.templateComponent.instance.height); //undefined

En la depuración, noté que solo después de que mi componente ejecuta ngAfterViewInit() , solo entonces puedo leer el ancho y la altura de la plantilla del componente de mi directiva y usar esos valores.

¿Hay alguna manera de decirle a mi directiva que espere hasta que finalice ngAfterViewInit() y luego haga lo que necesito de mi directiva con la información que estoy buscando?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

constructor(private cdRef:ChangeDetectorRef) {} ... var factory = this.resolver.resolveComponentFactory(MyComponentTemplate); this.templateComponent = this.viewContainerRef.createComponent(factory); this.templateComponent.instance.htmlStr = anyText; this.cdRef.detectChanges(); // run change detection immediately console.log(this.templateComponent.instance.width); //undefined console.log(this.templateComponent.instance.height); //undefined
over 4 years ago · Santiago Trujillo Denunciar

0

El uso de un ChangeDetectorRef inyectado globalmente no es necesario y es posible que no funcione. Puede confiar en el método changeDetectorRef de ComponentRef :

 var factory = this.resolver.resolveComponentFactory(MyComponentTemplate); this.templateComponent = this.viewContainerRef.createComponent(factory); this.templateComponent.instance.htmlStr = anyText; this.templateComponent.changeDetectorRef.detectChanges();
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda