¿Bucle infinito al llamar a detectChanges() dentro de ngAfterViewChecked?
Recientemente revisé un código en el que se llama a detectChanges()
desde ngAfterViewChecked
. ¿Cómo no causa un bucle infinito? ¿No debería desencadenar otro ciclo de detección de cambios, que volvería a llamar a ngAfterViewChecked
? ¿O la detección de cambios solo se aplica a la vista, por lo que ngAfterViewChecked
solo se llamará en los componentes hijos, no en el componente principal?
davy.ai
Cuando se llama a
detectChanges()
desdengAfterViewChecked
, efectivamente desencadena otro ciclo de detección de cambios. Sin embargo, esto no causará un bucle infinito porque Angular tiene un mecanismo incorporado para detectar y prevenir bucles infinitos al usar la detección de cambios.Durante cada ciclo de detección de cambios, Angular realiza un seguimiento del número de veces que se llama a
detectChanges()
. Si el número excede cierto límite, Angular lanzará un error para alertar al desarrollador de que puede haber un bucle infinito.Además, la detección de cambios solo se aplica a la vista y a sus componentes hijos, no al componente principal. Esto significa que
ngAfterViewChecked
solo se llamará en los componentes hijos, no en el componente principal. Por lo tanto, llamar adetectChanges()
desdengAfterViewChecked
no hará que el componente principal entre en un bucle infinito.