Skip to content

Sintaxis básica y directivas

Alpine.js utiliza atributos personalizados (directivas) en el HTML, como x-data, x-bind, x-on, etc., para añadir reactividad y lógica.

Define el estado local del componente. Es el punto de entrada para Alpine.js.

Ejemplo x-data
<div x-data="{ count: 0 }">
<span x-text="count"></span>
</div>

Ejecuta código cuando el componente se inicializa.

Ejemplo x-init
<div x-data x-init="console.log('Componente listo')">
...
</div>

Enlaza atributos HTML a datos de Alpine.

Ejemplo x-bind
<button x-data="{ disabled: true }" :disabled="disabled">Botón</button>

Escucha y responde a eventos del DOM. Se puede usar la sintaxis abreviada @.

Ejemplo x-on
<button x-on:click="alert('¡Hola!')">Haz clic</button>
<!-- o -->
<button @click="alert('¡Hola!')">Haz clic</button>

Muestra u oculta elementos condicionalmente (usa display: none).

Ejemplo x-show
<div x-data="{ visible: true }">
<p x-show="visible">Visible si 'visible' es true</p>
</div>

Renderiza elementos condicionalmente (elimina/agrega del DOM).

Ejemplo x-if
<template x-if="loggedIn">
<span>Bienvenido</span>
</template>

Enlaza datos bidireccionalmente con inputs.

Ejemplo x-model
<input x-data="{ nombre: '' }" x-model="nombre" placeholder="Tu nombre" />

Renderiza listas de elementos.

Ejemplo x-for
<ul x-data="{ items: ['A', 'B', 'C'] }">
<template x-for="item in items" :key="item">
<li x-text="item"></li>
</template>
</ul>

Permite renderizar HTML dinámico de forma segura (¡cuidado con XSS!).

Ejemplo x-html
<div x-data="{ contenido: '<b>Texto en negrita</b>' }">
<div x-html="contenido"></div>
</div>

Establece el texto de un elemento de forma reactiva.

Ejemplo x-text
<div x-data="{ mensaje: 'Hola mundo' }">
<span x-text="mensaje"></span>
</div>

Oculta el elemento hasta que Alpine.js haya inicializado el DOM.

Ejemplo x-cloak
<div x-data x-cloak>
<p>Este contenido se muestra solo cuando Alpine está listo.</p>
</div>
<style>
[x-cloak] { display: none; }
</style>

Mueve el contenido a otro lugar del DOM (útil para modales, tooltips, etc.).

Ejemplo x-teleport
<div x-data="{ abierto: false }">
<button @click="abierto = true">Abrir modal</button>
<div x-teleport="#modales" x-show="abierto">
<p>¡Soy un modal!</p>
<button @click="abierto = false">Cerrar</button>
</div>
</div>
<div id="modales"></div>

Genera identificadores únicos para elementos.

Ejemplo x-id
<div x-data="{ id: $id('input') }">
<label :for="id">Nombre</label>
<input :id="id" type="text" />
</div>

Evita que Alpine.js procese un elemento y sus hijos.

Ejemplo x-ignore
<div x-ignore>
<script>/* Este bloque no será procesado por Alpine */</script>
</div>

Ejecuta una expresión cada vez que cambian las dependencias reactivas usadas dentro de ella.

Ejemplo x-effect
<div x-data="{ count: 0 }">
<button @click="count++">Incrementar</button>
<span x-effect="console.log(count)"></span>
</div>

Permite referenciar elementos del DOM para manipularlos desde el código Alpine.

Ejemplo x-ref y $refs
<div x-data="{ enfocar() { this.$refs.input.focus() } }">
<input x-ref="input" type="text" />
<button @click="enfocar()">Foco</button>
</div>

Agrega animaciones de entrada y salida a los elementos.

Ejemplo x-transition
<div x-data="{ visible: false }">
<button @click="visible = !visible">Mostrar/Ocultar</button>
<div x-show="visible" x-transition>
<p>Animación de transición</p>
</div>
</div>

Detecta cuando un elemento entra o sale del viewport.

Ejemplo x-intersect
<div x-data x-intersect:enter="console.log('Entró al viewport')">
Observa la consola al hacer scroll
</div>

Agrega animaciones de colapso/expansión.

Ejemplo x-collapse
<div x-data="{ abierto: false }">
<button @click="abierto = !abierto">Toggle</button>
<div x-show="abierto" x-collapse>
Contenido colapsable animado
</div>
</div>

Permite aplicar máscaras de entrada a los campos de formulario.

Ejemplo x-mask
<input x-data x-mask="99/99/9999" placeholder="DD/MM/AAAA" />
🐝