Directivas integradas de Vue3
Vue.js incluye múltiples directivas integradas para agregar comportamiento reactivo específico o manipular el DOM en las plantillas.
A continuación se presentan las directivas integradas más comunes en Vue.js:
| Directiva | Ejemplo de uso | Descripción |
|---|---|---|
| v-text | <p v-text="message"></p> |
Actualiza el texto del elementotextContent, similar a la interpolación{{ }}, pero es un enlace unidireccional. |
| v-html | <div v-html="htmlContent"></div> |
Actualiza el contenido HTML del elementoinnerHTML, utilizado para generar HTML. |
| v-model | <input v-model="value"> |
Crea un enlace de datos bidireccional en los elementos de control de formulario, sincronizando los campos de entrada con las propiedades de datos. |
| v-show | <div v-show="isVisible"></div> |
Según si la expresión es verdadera o falsa, alterna la visualización y ocultación del elemento, usando ladisplaypropiedad CSS. |
| v-if | <p v-if="isVisible">Visible</p> |
Renderiza condicionalmente el elemento según si la expresión es verdadera o falsa; cuando la condición es falsa, el elemento se elimina del DOM. |
| v-else | <p v-if="isVisible">Visible</p><p v-else>Not Visible</p> |
v-ifDirectiva complementaria de v-if, utilizada para mostrar contenido alternativo cuando la condición es falsa. |
| v-else-if | <template v-if="type === 'A'"><p>Type A</p></template><template v-else-if="type === 'B'"><p>Type B</p></template> |
Se usa de forma consecutiva después dev-ifyv-else, para la evaluación de múltiples condiciones. |
| v-for | <li v-for="(item, index) in items" :key="index">{{ item }}</li> |
Itera sobre cada elemento de un array u objeto y genera la cantidad correspondiente de elementos. |
| v-on | <button v-on:click="handleClick">Click me</button> |
Vincula un detector de eventos para escuchar eventos del DOM; se puede abreviar como@。 |
| v-bind | <img v-bind:src="imageSrc.html"> |
Vincula dinámicamente atributos HTML; se puede abreviar como:。 |
| v-slot | <template v-slot:header><h2>Header</h2></template> |
Es la sintaxis para los slots con nombre; proporciona una ubicación para insertar contenido de componentes secundarios. |
| v-pre | <div v-pre>{{ message }}</div> |
Omite el proceso de compilación de este elemento y de todos sus subelementos; se utiliza para mostrar etiquetas Mustache sin procesar. |
| v-cloak | [v-cloak] { display: none; } |
Oculta el contenido de la plantilla antes de que la instancia de Vue termine de compilar, evitando mostrar etiquetas Mustache sin compilar. |
| v-once | <p v-once>{{ message }}</p> |
Renderiza el elemento y el componente solo una vez; no se actualizará con los cambios posteriores de datos. |
| v-memo |
<div v-memo="[valueA, valueB]"> ... </div> |
Almacena en caché el subárbol de una plantilla. Cuando el componente se vuelve a renderizar, si |
v-text
- Uso:
<p v-text="message"></p> - Descripción: Actualiza el texto del elemento
textContent, similar a la interpolación{{ }}, pero es un enlace unidireccional. Se puede utilizar para establecer el contenido de texto plano del elemento.
Ejemplo
<p v-text="message"></p>
Ejemplo
data() {
return {
message: 'Hello, Vue!'
};
}
return {
message: 'Hello, Vue!'
};
}
v-html
- Uso:
<div v-html="htmlContent"></div> - Descripción: Actualiza el contenido HTML del elemento
innerHTML, utilizado para generar contenido con estructura HTML. Se debe prestar atención a la seguridad para evitar ataques XSS.
Ejemplo
<div v-html="htmlContent"></div>
Ejemplo
data() {
return {
htmlContent: '<strong>Vue.js</strong> is awesome!'
};
}
return {
htmlContent: '<strong>Vue.js</strong> is awesome!'
};
}
v-model
- Uso:
<input v-model="value"> - Descripción: Crea un enlace de datos bidireccional en los elementos de control de formulario, sincronizando los campos de entrada con las propiedades de datos, y admite varios tipos de controles de formulario.
Ejemplo
<input type="text" v-model="message">
Ejemplo
data() {
return {
message: ''
};
}
return {
message: ''
};
}
v-show
- Uso:
<div v-show="isVisible"></div> - Descripción: Según si la expresión es verdadera o falsa, alterna la visualización y ocultación del elemento, usando la
displaypropiedad CSS que controla la visibilidad del elemento.
Ejemplo
<div v-show="isVisible">Visible when true</div>
Ejemplo
data() {
return {
isVisible: true
};
}
return {
isVisible: true
};
}
v-if / v-else / v-else-if
- Uso:
<p v-if="isVisible">Visible</p><p v-else>Not Visible</p> - Descripción: Renderiza condicionalmente el elemento según si la expresión es verdadera o falsa.
v-elseyv-else-ifSív-ifDirectiva complementaria de v-if, utilizada para la evaluación de múltiples condiciones.
Ejemplo
<p v-if="isVisible">Visible</p>
<p v-else>Not Visible</p>
<p v-else>Not Visible</p>
Ejemplo
data() {
return {
isVisible: true
};
}
return {
isVisible: true
};
}
v-for
- Uso:
<li v-for="(item, index) in items" :key="index">{{ item }}</li> - Descripción: Itera sobre cada elemento de un array u objeto, genera la cantidad correspondiente de elementos y admite especificar una clave (key) para mejorar la eficiencia del renderizado.
Ejemplo
<ul>
<li v-for="(item, index) in items" :key="index">{{ item }}</li>
</ul>
<li v-for="(item, index) in items" :key="index">{{ item }}</li>
</ul>
Ejemplo
data() {
return {
items: ['Apple', 'Banana', 'Cherry']
};
}
return {
items: ['Apple', 'Banana', 'Cherry']
};
}
v-on (@)
- Uso:
<button v-on:click="handleClick">Click me</button> - Descripción: Vincula un detector de eventos, utilizado para escuchar eventos del DOM; se puede abreviar como
@. Admite modificadores y nombres de eventos dinámicos.
Ejemplo
<button v-on:click="handleClick">Click me</button>
Ejemplo
methods: {
handleClick() {
alert('Button clicked');
}
}
handleClick() {
alert('Button clicked');
}
}
v-bind ( : )
- Uso:
<img v-bind:src="imageSrc.html"> - Descripción: Vincula dinámicamente atributos HTML; se puede abreviar como
:. Se utiliza para establecer dinámicamente atributos del elemento, como por ejemplosrc、href, etc.
Ejemplo
<img v-bind:src="imageSrc" alt="Vue Logo">
Ejemplo
data() {
return {
imageSrc: 'https://vuejs.org/images/logo.png'
};
}
return {
imageSrc: 'https://vuejs.org/images/logo.png'
};
}
v-slot
- Uso:
<template v-slot:header><h2>Header</h2></template> - Descripción: Es la sintaxis para slots con nombre; proporciona una posición para insertar el contenido de componentes secundarios, utilizada para la distribución de contenido en componentes personalizados.
Ejemplo
<BaseLayout>
<template v-slot:header>
<h2>Header Content</h2>
</template>
<template v-slot:footer>
<p>Footer Content</p>
</template>
</BaseLayout>
<template v-slot:header>
<h2>Header Content</h2>
</template>
<template v-slot:footer>
<p>Footer Content</p>
</template>
</BaseLayout>
Ejemplo
// Definición del componente BaseLayout
Vue.component('BaseLayout', {
template: `
<div>
<header><slot name="header"></slot></header>
<main><slot></slot></main>
<footer><slot name="footer"></slot></footer>
</div>
`
});
Vue.component('BaseLayout', {
template: `
<div>
<header><slot name="header"></slot></header>
<main><slot></slot></main>
<footer><slot name="footer"></slot></footer>
</div>
`
});
v-pre
- Uso:
<div v-pre>{{ message }}</div> - Descripción: Omite el proceso de compilación de este elemento y de todos sus subelementos; se usa para mostrar etiquetas Mustache sin procesar, evitando que Vue compile el contenido.
Ejemplo
<div v-pre>{{ message }}</div>
Ejemplo
data() {
return {
message: 'Hello, Vue!'
};
}
return {
message: 'Hello, Vue!'
};
}
v-cloak
- Uso:
[v-cloak] { display: none; } - Descripción: Oculta el contenido de la plantilla antes de que la instancia de Vue complete la compilación, evitando mostrar etiquetas Mustache sin compilar.
Ejemplo
<div v-cloak>{{ message }}</div>
Ejemplo
[v-cloak] { display: none; }
Ejemplo
data() {
return {
message: 'Hello, Vue!'
};
}
return {
message: 'Hello, Vue!'
};
}
v-once
- Uso:
<p v-once>{{ message }}</p> - Descripción: Renderiza el elemento y el componente solo una vez; no se actualizará con los cambios posteriores de datos. Se usa para contenido estático o que se actualiza con poca frecuencia.
Ejemplo
<p v-once>{{ message }}</p>
Ejemplo
data() {
return {
message: 'Hello, Vue!'
};
}
return {
message: 'Hello, Vue!'
};
}