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

224
Vistas
QueryList cambia la suscripción no funciona

Tengo una QueryList en un componente. Estoy agregando dinámicamente otros componentes, que estarán presentes en QueryList , pero si me suscribo a los changes de QueryList , no pasa nada. Pensé que era porque me suscribí a ngAfterViewInit , pero QueryList aún no está undefined en ngOnInit .

Aquí tengo el plunkr .

código:

 @Component({ ... }) export class AppComponent { @ViewChildren(ControlFactoryDirective) factories: QueryList<ControlFactoryDirective> ngAfterViewInit() { this.factories.changes.subscribe(() => { console.log('changed') }) } }
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La cuestión es que la lista que llega a la propiedad de su factories ya está precargada. Por lo tanto, simplemente no tiene la oportunidad de suscribirse a sus cambios antes de que se complete por primera vez. Pero, por supuesto, todos los cambios que suceden más tarde llegan a su suscriptor.

Aquí está el plunkr con su ejemplo actualizado: tenga en cuenta que las fábricas ahora tienen un configurador que demuestra que está precargado (normalmente no lo necesita en una aplicación real, eso es solo para averiguar qué valor proviene del marco)

Creo que es un comportamiento totalmente válido. Entonces, en ngAfterViewInit , recorra los valores en QueryList y haga lo mismo que está a punto de hacer en el suscriptor:

 ngAfterViewInit() { this.processChildren(); // first call to processChildren this.factories.changes.subscribe(_ => this.processChildren() // subsequent calls to processChildren ); } private processChildren(): void { console.log('Processing children. Their count:', this.factories.toArray().length) }
about 4 years ago · Santiago Trujillo Denunciar

0

Después de realizar un cambio en los objetos de la lista de consultas, debe llamar a la lista de consultas para notificar los cambios.

 update() { this.factories.forEach(factory => { console.log(factory.componentRef.instance.model.data = "alma") // factory.() this.factories.notifyOnChanges(); }) }
about 4 years ago · Santiago Trujillo Denunciar

0

También puede agregar startWith(undefined) así:

 ngAfterViewInit() { this.factories.changes.pipe(startWith(undefined)).subscribe(() => { console.log('changed') }) }

Esto activará el controlador de suscripción inmediatamente.

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