mi código angular se ve así>
<input type='text' (blur)='saveData()'> <button (click)='navigateToPage2()'>Saltando desde el cuadro de texto enfocado al clic del botón , hay una condición de carrera entre dos eventos.
El problema es que el clic del botón se ignora porque el evento de desenfoque se activa primero y trae la rueda giratoria a la pantalla mientras realiza una llamada al servidor para guardar datos.
¿Cómo resuelvo este problema exacto?
¿Hay algún truco para hacer que el evento de clic se active antes del evento de desenfoque?
En lugar de tal truco para disparar, haga clic antes del evento de desenfoque, intente la siguiente solución:
Para comprender esto mejor, debe conocer este orden en el que se activa un evento específico:
Puede usar esta orden para trabajar a su favor en este caso.
Intente usar el evento Mousedown en su lugar y eso se activará antes del evento de desenfoque.
Además, intente ejecutar este fragmento de código. Te ayudará a entender el orden anterior.
Type first in text box below and then click button <br/> <input type='text' onblur="console.log('blur');" /> <button onclick="console.log('click')" onmouseup="console.log('mouseup')" onmousedown="console.log('mousedown')" > Type first and then this click button</button>De acuerdo con este ejemplo, también puede usar e.preventDefault en el evento mouseDown: https://codepen.io/mudassir0909/pen/eIHqB (usó jquery pero debería ser lo mismo con otra biblioteca)
Si está escuchando en (blur)="onBlur()" envuelva el contenido de onBlur() en un setTimout con una duración de 100 ms o más.