materials

Directivas en Vue

Directivas básicas

Las directivas son atributos especiales que se ponen en las etiquetas HTML y que les dan cierta funcionalidad. Todas comienzan por v-.

Las más comunes son:

Lo que enlazamos en una directiva o una interpolación puede ser una variable o una expresión javascript. Ej.:

<p>{ { name }}</p>
<p>{ { 'Cómo estás ' + name }}</p>
<p>{ { name=='root'?'Hola Administrador':'Hola ' + name }}</p>

Condicionales: v-if

Esta directiva permite renderizar o no un elemento HTML en función de una variable o expresión.

El checkbox está enlazado a la variable marcado (a la que al inicio le hemos dado el valor true, por eso aparece marcado por defecto) y los párrafos se muestran o no en función del valor de dicha variable.

La directiva v-else es opcional (puede haber sólo un v-if) pero si la ponemos el elemento con el v-else debe ser el inmediatamente siguiente al del v-if.

NOTA: Los ejemplos de esta página son todos de Vue2. Recordad que en Vue3 es todo igual excepto la forma de crear la instancia Vue que sería:

const app = Vue.createApp({
  data() {
    return {
      marcado: true,
    }
  }
}).mount('#app');

También se pueden enlazar varios con v-else-if:

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>
Haz el ejercicio del tutorial de Vue.js

Bucles: v-for

Esta directiva repite el elemento HTML en que se encuentra una vez por cada elemento del array al que se enlaza.

See the Pen v-for by Juan Segura (@juanseguravasco) on CodePen.

La directiva v-for recorre el array todos y para cada elemento del array crea una etiqueta <li> y carga dicho elemento en la variable elem a la que podemos acceder dentro del <li>.

Además del elemento nos puede devolver su índice en el array: v-for="(elem,index) in todos" ....

Vue es más eficiente a la hora de renderizar si cada elemento que crea v-for tiene su propia clave, lo que se consigue con el atributo key. Podemos indicar como clave algún campo único del elemento o el índice:

<... v-for="(elem,index) in todos" :key="index" ...>

Pasar una key en cada v-for es recomendable ahora pero será obligatorio al usarlo en componentes así que conviene usarlo siempre.

También podemos usar v-for para que se ejecute sobre un rango (como el típico for (i=0;i<10;i++)):

<span v-for="n in 10" :key="n"></span>

NOTA: No se recomienda usar v-for y v-if sobre el mismo elemento. Si se hace siempre se ejecuta primero el v-if.

Haz el ejercicio del tutorial de Vue.js

Eventos: v-on

Esta directiva captura un evento y ejecuta un método como respuesta al mismo.

See the Pen v-for by Juan Segura (@juanseguravasco) on CodePen.

El evento que queremos capturar se pone tras el carácter : y se indica el método que se ejecutará.

Fijaos en el método delTodos() que para hacer referencia desde el objeto Vue a alguna variable o método se le antepone this.

Se puede pasar un parámetro a la función escuchadora:

<button v-on:click="pulsado('prueba')">Pulsa</button>
  pulsado(valor) {
    alert(valor);
  }

Esta directiva se usa mucho así que se puede abreviar con @. El código equivalente sería:

<button @click="pulsado('prueba')">Pulsa</button>
Haz el ejercicio del tutorial de Vue.js

Modificadores de eventos

A un evento gestionado por una directiva v-on podemos añadirle (separado por .) un modificador. Alguno de los más usados son:

Ejemplo:

<form @submit.prevent="enviaForm">

Ejemplo de aplicación

Vamos a hacer una aplicación para gestionar una lista de cosas a hacer. Cada cosa a hacer tiene un título y puede estar hecha o no.

Debe aparecer la lista de cosas a hacer con:

Además queremos que:

Solución de la aplicación

Puedes ver una solución al problema planteado en:

See the Pen Untitled by Juan Segura (@juanseguravasco) on CodePen.

Cosas a comentar: