Directivas y componentes en Vue.js: Ejemplos prácticos

Directivas en Vue.js

En Vue.js, las directivas son atributos especiales prefijados con v- que proporcionan funcionalidades reactivas. Por ejemplo, v-bind enlaza dinámicamente un atributo de un elemento a una expresión.

<div id="contenedor" v-bind:alt="info">
  Texto de demostración
</div>

<script>
  new Vue({
    el: '#contenedor',
    data: {
      info: 'Descripción dinámica'
    }
  })
</script>

Aquí, el atributo alt del div se sincroniza con la propiedad info del estado de Vue.

Control de renderizado con v-if

La directiva v-if permite mostrar u ocultar elementos condicionalmente. Se difernecia de v-show en que elimina el elemento del DOM.

<div id="aplicacion" v-if="visible" v-on:click="alternar">
  {{ texto }}
</div>

<script>
  new Vue({
    el: '#aplicacion',
    data: {
      texto: 'Contenido condicional',
      visible: true
    },
    methods: {
      alternar: function() {
        this.visible = !this.visible;
      }
    }
  })
</script>

El método alternar invierte el valor de visible, controlando la aparición del elemento mediante v-if.

Renderizado de listas con v-for

Para iterar sobre arrays y renderizar elementos repetidos, se utiliza v-for.

<div id="aplicacion">
  <ul>
    <li v-for="elemento in conjunto">{{ elemento }}</li>
  </ul>
</div>

<script>
  new Vue({
    el: '#aplicacion',
    data: {
      conjunto: ['Primer ítem', 'Segundo ítem', 'Tercer ítem']
    }
  })
</script>

Cualquier modificación en el array conjunto actualizará automáticamente la lista en la interfaz.

Manejo de eventos con v-on

v-on escucha eventos del DOM, como clics o teclas, y ejecuta métodos definidos en la instancia de Vue.

<div id="aplicacion">
  {{ mensaje }}
  <button v-on:click="mostrarAlerta">Activar</button>
</div>

<script>
  new Vue({
    el: '#aplicacion',
    data: {
      mensaje: 'Interacción con eventos'
    },
    methods: {
      mostrarAlerta: function() {
        alert('¡Evento disparado!');
      }
    }
  })
</script>

El botón dispara la función mostrarAlerta al hacer clic, demostrando la enlazón de eventos.

Enlace bidireccional con v-model

v-model sincroniza datos entre controles de formulario y el estado de Vue, permitiendo la reactividad bidireccional.

<div id="aplicacion">
  <input v-model="campoTexto"></input>
  <button v-on:click="resetear">Reiniciar</button>
</div>

<script>
  new Vue({
    el: '#aplicacion',
    data: {
      campoTexto: 'Valor inicial'
    },
    methods: {
      resetear: function() {
        this.campoTexto = 'Reset completado';
      }
    }
  })
</script>

Al modificar el input o hacer clic en el botón, ambos elementos se actualizan de manera reactiva.

Componentización en Vue.js

Vue promueve la arquitectura basada en componentes, donde la interfaz se divide en piezas reutilizables e independientes.

<div id="app">
  <componente-personalizado></componente-personalizado>
</div>

<script>
  Vue.component('componentePersonalizado', {
    template: '<div>Componente aislado</div>'
  })

  new Vue({
    el: '#app'
  })
</script>

Los componentes se registran con nombres en camelCase, pero se usan en HTML con guiones para evitar problemas de mayúsculas/minúsculas.

Comunicación entre componentes padre e hijo

Para pasar datos de un componente padre a uno hijo, se emplea v-bind junto con props en el componente hijo.

<div id="app">
  <hijo-comp v-bind:datos="informacion"></hijo-comp>
</div>

<script>
  Vue.component('hijoComp', {
    props: ['datos'],
    template: '<div>{{ datos }}</div>'
  })

  new Vue({
    el: '#app',
    data: {
      informacion: 'Dato desde el padre'
    }
  })
</script>

El componente hijo declara props para recibir los datos enlazados con v-bind, facilitando el flujo de inforamción jerárquico.

Etiquetas: Vue vuejs Directivas componentes reactividad

Publicado el 6-7 20:33