🎚 Modifiers
En determinados eventos podemos necesitar cierto comportamiento exclusivo de los eventos como llamar a la función preventDefault o chequear el keycode de la tecla que se apretó. Vue nos ofrece una alternativa interesante para lidiar con estos casos de una forma más sencilla y vamos a repasar algunos de ellos.
.prevent
Agregamos al componente Search, funcionalidad para reiniciar la búsqueda:
Creamos en nuestro objeto
methodsuna nueva función llamadareset. Dentro de esta vamos a restablecer los valores defaults deresultsyquery.Luego agregamos un elemento
<a>en nuestro HTML al cual vamos linkear con el metodoresetal momento de hacer click. Para este caso vamos a usar de nuevo la directivav-on(o:@) pero le vamos a agregar el modifier.prevent, el cual equivale al tradicionale.preventDefault(). De esta manera evitamos que se dispare la acción nativa del tag<a>para el evento click.
<a href="#" @click.prevent="reset">x</a>
.enter
Ahora, Para mejorar la UX de nuestra aplicación, vamos a permitir que la búsqueda se pueda disparar cuando el usuario presione la tecla enter y tenga el foco puesto en el <input> de búsqueda. Recuerden que usando v-on podemos escuchar cualquier tipo de evento que el elemento HTML disponga.
- En este caso vamos a usar
v-oncon el eventokeyup(en el elementoinput). Para este evento Vue nos ofrece modifiers que nos permiten restringirlo a una tecla específica sin que nosotros tengamos que estar chequeando elkeycodepor código. Usando la misma notación que en el punto anterior linkeamos el evento con el modifier.enter(al métodosearch).

🤓 Extras
Podemos agregar un componente de tipo loader para mostrar un mensaje o un spinner mientras la petición HTTP de búsqueda está en curso. Para eso vamos a necesitar una propiedad isLoading en el vm que nos permita reconocer cuando la petición está en curso y cuando no. También vamos a necesitar una directiva v-show para la parte de HTML asociada a isLoading. En resumen vamos a setear el valor de isLoading como true al comienzo del método search y como false dentro de la función .then()