7 - Eventos: v-on:keypress, v-on:keyup

Veamos como se captura cuando se presiona una tecla y cuando se la suelta. Para esto tenemos los eventos v-on:keypress que se dispara cuando el operador presiona una tecla y v-on:keyup cuando suelta la tecla.

Debemos definir que etiqueta HTML capturará el evento de presión de tecla.

Problema

Mostrar en una lista ordenada una serie de actividades a realizar. Asociar dichas actividades a un vector en el modelo.
Mediante un control de tipo input (text) permitir ingresar nuevas actividades y al presionar la tecla enter actualizar la lista ordenada con la nueva actividad.

<!doctype html>
<html>
<head>
  <title>Prueba Vue</title> 
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<body>
  <div id="aplicacion">
    <h1>Listado de actividades</h1>
    <ol>
      <li v-for="actividad in actividades">
        {{actividad}}
      </li>
    </ol>
    Nueva actividad:<input type="text" v-on:keyup.enter="actualizarLista" v-model="actividad" placeholder="Enter para confirmar">
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script>
    var app=new Vue({
      el: '#aplicacion',
      data:{ 
        actividad: '',
        actividades: []
      },
      methods: {
        actualizarLista: function() {
          this.actividades.push(this.actividad);
          this.actividad = '';
        }
      }
    })
  </script>
</body>
</html>

Listado de actividades

  1. {{actividad}}
Nueva actividad:

En el modelo de datos hemos definido dos propiedades una llamada 'actividad':

        actividad: '',

La propiedad 'actividad' la asociamos con el control input mediante la directiva v-model donde el operador carga por teclado la actividad:

    Nueva actividad:<input type="text" v-on:keyup.enter="actualizarLista" v-model="actividad" placeholder="Enter para confirmar">

Como vemos en el control input definimos una segunda directiva v-on:keyup.enter que se ejecuta cuando el operador suelta una tecla y dicha tecla es la tecla enter (también podemos escribir v-on:keyup.13 que es el caracter asscii de dicha tecla)

Por otro lado tenemos en el modelo de datos un vector vacío donde se guardarán las actividades:

        actividades: []

Cuando se presiona la tecla "Enter" se ejecuta el método "actualizarLista":

        actualizarLista: function() {
          this.actividades.push(this.actividad);
          this.actividad = '';
        }

Como podemos comprobar en este método solo agregamos al vector actividades mediante el método push de Javascript el texto que hay en el control input. Solo gracias a Vue se actualiza la lista ordenada de HTML con las actividades del arreglo:

    <ol>
      <li v-for="actividad in actividades">
        {{actividad}}
      </li>
    </ol>

Es importante ver lo concisa que es nuestra aplicación que añade actividades a una lista utilizando el framework Vue.

Ejecutar Ejemplo

Resolver problema propuesto

Retornar