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

452
Vistas
La detección de cambios no funciona al crear un componente a través de ComponentFactoryResolver

Tengo un componente, creando otro componente con ComponentFactoryResolver. Parece funcionar bien, puedo acceder a los datos a través de @Input. El problema es que nunca se llama a ngOnChanges cuando se inicia el componente o cuando cambian los datos. Sin embargo, se dispara si creo el componente de la manera normal, con su selector en HTML. Sin embargo, eso no es dinámico, así que me quedo con ComponentFactoryResolver. ¿Es este comportamiento normal?

Mi componente principal tiene su entrada:

@ViewChild( MiDirectiva ) miHost: MiDirectiva;

Luego crea componentes secundarios cuyas entradas son así:

 @Input('key') key: String; @Input('index') index: number;

y estoy creando el componente así:

 let item = new Item(ItemDropdownComponent, this.key, 0); let componentFactory = this._componentFactoryResolver.resolveComponentFactory(item.component); let viewContainerRef = this.myHost.viewContainerRef; viewContainerRef.clear(); let componentRef = viewContainerRef.createComponent(componentFactory); (<ItemInterfaceComponent>componentRef.instance).key = item.key; (<ItemInterfaceComponent>componentRef.instance).index = item.index;
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Ese es el comportamiento esperado. Sin embargo, puede invocar la detección de cambios explícitamente

 componentRef.changeDetectorRef.detectChanges();
about 4 years ago · Santiago Trujillo Denunciar

0

Si ejecuta la detección de cambios manualmente, tenga en cuenta que se ejecutará para el componente y todos sus elementos secundarios, es decir, la rama completa. Por lo tanto, debe pensar en separar a otros niños al crear uno nuevo.

Este problema se rastrea en: https://github.com/angular/angular/issues/22010

about 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