Directivas Integradas
v-text
Actualiza el texto de un elemento.
Espera:
string
Detalles
v-text
trabaja seteando la propiedad textContent del elemento, por lo que sobreescribirá cualquier contenido existente dentro del elemento. Si necesitas actualizar parte deltextContent
, deberías usar la interpolación de mostacho instead.Ejemplo
template<span v-text="msg"></span> <!-- es igual a --> <span>{{msg}}</span>
Véase también Sintaxis de la Plantilla - interpolación de Texto
v-html
Actualiza la propiedad innerHTML del elemento.
Espera:
string
Detalles
EL contenido de
v-html
es insertado como HTML plano - Vue template syntax will not be processed. Si te encuentras tratando de componer plantillas usandov-html
, trata de replantear la solución usando componentes en su lugar.Nota de Seguridad
Renderizar dinámicamente HTML arbitrario en tu sitio web puede ser muy peligroso porque puede conducir fácilmente a ataques XSS. Sólo usa
v-html
en contenido de confianza y nunca en contenido proporcionado por el usuario.En los Componentes de un Solo Archivo (SFC), los estilos
scoped
no se aplicarán en el contenido dentro dev-html
, porque ese HTML no es procesado por el compilador de plantillas de Vue. Si deseas orientar el contenidov-html
con scoped CSS, puedes utilizar módulos CSS o un elemento global adicional<style>
con una estrategia de alcance manual como BEM.Ejemplo
template<div v-html="html"></div>
Véase también Sintáxis de la Plantilla - HTML Puro
v-show
Cambia la visibilidad de un elemento basado en la veracidad del valor de la expresión.
Espera:
any
Detalles
v-show
trabaja seteando la propiedad CSSdisplay
a través de estilos en línea, y tratará de respetar el valor inicial dedisplay
cuando el elemento está visible. También activa las transiciones cuando cambia su estado.Véase también Renderizado Condicional - v-show
v-if
Renderiza condicionalmente un elemento o un fragmento de plantilla basado en la veracidad del valor de la expresión.
Espera:
any
Detalles
Cuando un elemento
v-if
cambia, el elemento y sus directivas / componentes son destruidos y vueltos a construir. Si la condición inicial es falsa, el contenido interior no se renderizará en absoluto.Puede usarse en
<template>
para denotar un bloque condicional que contenga sólo texto o múltiples elementos.Esta directiva desencadena transiciones cuando su condición cambia.
Cuando se utiliza conjuntamente,
v-if
tiene mayor prioridad quev-for
. No recomendamos utilizar estas dos directivas juntas en un mismo elemento; ver la guía de renderizado de listas para más detalles.Véase también Renderizado Condicional - v-if
v-else
Denota el "bloque else" para v-if
o para un encadenamiento v-if
/ v-else-if
.
No espera una expresión
Detalles
Restricción: el elemento anterior debe tener
v-if
ov-else-if
.Puede usarse en
<template>
para denotar un bloque condicional que contenga sólo texto o múltiples elementos.
Ejemplo
template<div v-if="Math.random() > 0.5"> Ahora me ves </div> <div v-else> Ahora no me ves </div>
Véase también Renderizado Condicional - v-else
v-else-if
Denota el "bloque else if" para v-if
. Se puede encadenar.
Espera:
any
Detalles
Restricción: el elemento anterior debe tener
v-if
ov-else-if
.Puede usarse en
<template>
para denotar un bloque condicional que contenga sólo texto o múltiples elementos.
Ejemplo
template<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> Ni A, ni B, ni C </div>
Véase también Renderizado Condicional - v-else-if
v-for
Renderiza el elemento o bloque de plantilla varias veces en función de los datos de origen.
Espera:
Array | Object | number | string | Iterable
Detalles
El valor de la directiva debe utilizar la sintaxis especial
alias in expression
para proporcionar un alias para el elemento actual que se está iterando:template<div v-for="item in items"> {{ item.text }} </div>
También puede especificar un alias para el índice (o la clave si se utiliza en un Object):
template<div v-for="(item, index) in items"></div> <div v-for="(value, key) in object"></div> <div v-for="(value, name, index) in object"></div>
El comportamiento por defecto de
v-for
intentará colocar los elementos en su sitio sin moverlos. Para forzarlo a reordenar los elementos, debe proporcionar un identificador de ordenación con el atributo especialkey
:template<div v-for="item in items" :key="item.id"> {{ item.text }} </div>
v-for
puede trabajar también con valores que implementan el Protocolo Iterable, incluyendo los objetos nativosMap
ySet
.Véase también
v-on
Adjunta un escuchador de eventos al elemento.
Abreviatura:
@
Espera:
Function | Inline Statement | Object (without argument)
Argumento:
event
(opcional si se usa la sintaxis de objeto)Modificadores
.stop
- llama aevent.stopPropagation()
..prevent
- llama aevent.preventDefault()
..capture
- agrega un escuchador de eventos en modo captura..self
- solo se dispara el manejador si el evento fue activado desde este elemento..{keyAlias}
- solo se activa el manejador en ciertas teclas..once
- activa el manejador como máximo una vez..left
- solo activa el manejador para los eventos del botón izquierdo del mouse..right
- solo activa el manejador para los eventos del botón derecho del mouse..middle
- solo activa el manejador para los eventos del botón del medio del mouse..passive
- adjunta un evento DOM con{ passive: true }
.
Detalles
El tipo de evento se denota con el argumento. La expresión puede ser un nombre de método, una declaración inline, u omitirse si hay modificadores presentes.
Cuando se utiliza en un elemento normal, sólo escucha los eventos DOM nativos. Cuando se utiliza en un componente personalizado, escucha los eventos personalizados emitidos en ese componente hijo.
Cuando escucha eventos nativos del DOM, el método recibe el evento nativo como único argumento. Si se utiliza una sentencia inline, la sentencia tiene acceso a la propiedad especial
$event
:v-on:click="handle('ok', $event)"
.v-on
también admite la vinculación a un objeto de pares evento /escuchador sin argumento. Tenga en cuenta que cuando se utiliza la sintaxis del objeto, no admite ningún modificador.Ejemplo
template<!-- evento manejado por un método --> <button v-on:click="doThis"></button> <!-- evento dinámico --> <button v-on:[event]="doThis"></button> <!-- declaración inline --> <button v-on:click="doThat('hello', $event)"></button> <!-- abreviatura --> <button @click="doThis"></button> <!-- abreviatura con evento dinámico --> <button @[event]="doThis"></button> <!-- detener la propagación --> <button @click.stop="doThis"></button> <!-- prevenir comportamiento por defecto --> <button @click.prevent="doThis"></button> <!-- prevenir comportamiento por defecto sin expresión --> <form @submit.prevent></form> <!-- encadenando modificadores --> <button @click.stop.prevent="doThis"></button> <!-- modificador key usando keyAlias --> <input @keyup.enter="onEnter" /> <!-- el evento click será disparado como máximo una vez --> <button v-on:click.once="doThis"></button> <!-- sintaxis de objecto --> <button v-on="{ mousedown: doThis, mouseup: doThat }"></button>
Escuchar eventos personalizados en un componente hijo (el manejador es llamado cuando "mi-evento" es emitido en el hijo):
template<MyComponent @my-event="handleThis" /> <!-- declaración inline --> <MyComponent @my-event="handleThis(123, $event)" />
Véase también
v-bind
Vincula dinámicamente uno o más atributos, o una prop de un componente a una expresión.
Abreviatura:
:
o.
(cuando se usa el modificar.prop
)- Omitir el valor (cuando el atributo y el valor vinculado tienen el mismo nombre) 3.4+
Espera:
any (con argumento) | Object (sin argumento)
Argumento:
attrOrProp (opcional)
Modificadores
.camel
- transforma el nombre del atributo kebab-case en camelCase..prop
- fuerza a que el vínculo sea seteado como una propiedad DOM. 3.2+.attr
- fuerza a que el vínculo sea seteado como un atributo DOM. 3.2+
Uso
Cuando se utiliza para enlazar el atributo
class
ostyle
,v-bind
soporta tipos de valores adicionales como Array u Objects. Ver la sección de la guía vinculada más abajo para más detalles.Cuando se establece un enlace en un elemento, Vue comprueba por defecto si el elemento tiene la clave definida como una propiedad utilizando un operador de comprobación
in
. Si la propiedad está definida, Vue establecerá el valor como una propiedad DOM en lugar de un atributo. Esto debería funcionar en la mayoría de los casos, pero puedes anular este comportamiento utilizando explícitamente los modificadores.prop
o.attr
. Esto es a veces necesario, especialmente cuando se trabaja con elementos personalizados.Cuando se utiliza para la vinculación de la prop del componente, la prop debe ser declarada correctamente en el componente hijo.
Cuando se utiliza sin un argumento, puede usarse para enlazar un objeto que contenga pares nombre-valor de atributos.
Ejemplo
template<!-- vinculación de un atributo --> <img v-bind:src="imageSrc" /> <!-- abreviatura del mismo nombre (3.4+), se expande a :src="src" --> <img :src /> <!-- nombre de atributo dinámico --> <button v-bind:[key]="value"></button> <!-- abreviatura --> <img :src="imageSrc" /> <!-- abreviatura con nombre de atributo dinámico --> <button :[key]="value"></button> <!-- concatenación de string inline --> <img :src="'/path/to/images/' + fileName" /> <!-- vinculación de clase --> <div :class="{ red: isRed }"></div> <div :class="[classA, classB]"></div> <div :class="[classA, { classB: isB, classC: isC }]"></div> <!-- vinculación de estilo --> <div :style="{ fontSize: size + 'px' }"></div> <div :style="[styleObjectA, styleObjectB]"></div> <!-- vinculación de un objeto con atributos --> <div v-bind="{ id: someProp, 'other-attr': otherProp }"></div> <!-- vinculación de prop. "prop" debe estar declarada en el componente hijo. --> <MyComponent :prop="someThing" /> <!-- pasa las props en común del padre al componente hijo --> <MyComponent v-bind="$props" /> <!-- XLink --> <svg><a :xlink:special="foo"></a></svg>
El modificador
.prop
también tiene su propia abreviatura,.
:template<div :someProperty.prop="someObject"></div> <!-- equivalente a --> <div .someProperty="someObject"></div>
El modificador
.camel
convierte a camel-case el nombre de un atributo dev-bind
cuando cuando se usan plantillas en el DOM, por ejemplo, el atributo SVGviewBox
:template<svg :view-box.camel="viewBox"></svg>
No se necesita
.camel
si estás usando plantillas escritas en un string, o si precompilas la plantilla en la compilación.Véase también
v-model
Crear un enlace bidireccional en un elemento de entrada del formulario o un componente.
Espera: varía en función del valor del elemento de entrada del formulario o de la salida de los componentes
Limitado a:
<input>
<select>
<textarea>
- componentes
Modificadores
Véase también
v-slot
Denota slots con nombre o slots asignados que esperan recibir props.
Abreviatura:
#
Espera: una expresión JavaScript que sea válida en una posición de argumento de función, incluyendo soporte para desestructuración. Opcional - solo es necesaria si el slot espera que le sean pasadas props.
Argumento: nombre del slot (opcional, el nombre por defecto es
default
)Limitado a:
<template>
- componentes (para un solo slot por defecto con props)
Ejemplo
template<!-- Slots asignados --> <BaseLayout> <template v-slot:header> Contenido de la cabecera </template> <template v-slot:default> Contenido del slot por defecto </template> <template v-slot:footer> Contenido del pie de página </template> </BaseLayout> <!-- Slots asignados que reciben props --> <InfiniteScroll> <template v-slot:item="slotProps"> <div class="item"> {{ slotProps.item.text }} </div> </template> </InfiniteScroll> <!-- Slot por defecto que recibe props, con desestructuramiento --> <Mouse v-slot="{ x, y }"> Mouse position: {{ x }}, {{ y }} </Mouse>
Véase también
v-pre
Omite la compilación para este elemento y todos sus hijos.
No espera una expresión
Detalles
Dentro del elemento con
v-pre
, toda la sintaxis de la plantilla Vue será preservada y renderizada tal cual. El caso de uso más común de esto es mostrar etiquetas de mostacho en bruto.Ejemplo
template<span v-pre>{{ esto no será compilado }}</span>
v-once
Renderiza el elemento y el componente una sola vez, y omite futuras actualizaciones.
No espera una expresión
Detalles
En las siguientes re-renderizaciones, el elemento/componente y todos sus hijos serán tratados como contenido estático y serán omitidos. Esto puede utilizarse para optimizar el rendimiento de las actualizaciones.
template<!-- elemento único --> <span v-once>This will never change: {{msg}}</span> <!-- elemento con hijos --> <div v-once> <h1>comment</h1> <p>{{msg}}</p> </div> <!-- componente --> <MyComponent v-once :comment="msg"></MyComponent> <!-- uso con directiva `v-for` --> <ul> <li v-for="i in list" v-once>{{i}}</li> </ul>
Desde la versión 3.2, también puedes memorizar parte de la plantilla con condiciones de invalidación utilizando
v-memo
.Véase también
v-memo
Espera:
any[]
Detalles
Memoriza un sub-árbol de la plantilla. Puede utilizarse tanto en elementos como en componentes. La directiva espera una matriz de longitud fija de valores de dependencia para comparar para la memoización. Si todos los valores de la matriz son iguales a los de la última representación, se omitirán las actualizaciones de todo el subárbol. Por ejemplo:
template<div v-memo="[valueA, valueB]"> ... </div>
Cuando el componente se vuelve a renderizar, si tanto
valueA
comovalueB
siguen siendo los mismos, se saltarán todas las actualizaciones de este<div>
y sus hijos. De hecho, incluso la creación del Virtual DOM VNode también se saltará ya que la copia memoizada del sub-árbol puede ser reutilizada.Es importante especificar el array de memoización correctamente, de lo contrario podemos saltarnos actualizaciones que sí deberían aplicarse.
v-memo
con un array de dependencia vacío (v-memo="[]"
) sería funcionalmente equivalente av-once
.Uso con
v-for
v-memo
se proporciona únicamente para microoptimizaciones en escenarios de rendimiento crítico y debería ser raramente necesario. El caso más común en el que esto puede resultar útil es cuando se renderizan grandes listasv-for
(dondelength > 1000
):template<div v-for="item in list" :key="item.id" v-memo="[item.id === selected]"> <p>ID: {{ item.id }} - seleccionado: {{ item.id === selected }}</p> <p>...más nodos hijos</p> </div>
Cuando el estado
selected
del componente cambia, se creará una gran cantidad de VNodes aunque la mayoría de los elementos permanezcan exactamente igual. El uso dev-memo
aquí es esencialmente decir "sólo actualizar este elemento si pasó de no seleccionado a seleccionado, o al revés". Esto permite que cada elemento no afectado reutilice su VNode anterior y se salte la difusión por completo. Ten en cuenta que no necesitamos incluiritem.id
en la matriz de dependencia de memo aquí, ya que Vue lo infiere automáticamente de la:key
del elemento.WARNING
Cuando uses
v-memo
conv-for
, asegúrate de que se usan en el mismo elemento.v-memo
no funciona dentro dev-for
.También se puede utilizar
v-memo
en los componentes para evitar manualmente las actualizaciones no deseadas en ciertos casos extremos en los que la comprobación de la actualización del componente hijo ha sido desoptimizada. Pero, de nuevo, es responsabilidad del desarrollador especificar las matrices de dependencia correctas para evitar omitir las actualizaciones necesarias.Véase también
v-cloak
Se utiliza para ocultar la plantilla no compilada hasta que esté lista.
No espera una expresión
Detalles
Esta directiva es necesaria solo en configuraciones sin pasos de compilación.
Cuando se utilizan plantillas en el DOM, puede haber un "destello de plantillas no compiladas": el usuario puede ver etiquetas de mostacho sin procesar hasta que el componente montado las sustituya por contenido renderizado.
La etiqueta
v-cloak
permanecerá en el elemento hasta que se monte la instancia del componente asociado. Combinado con reglas CSS como[v-cloak] { display: none }
, puede utilizarse para ocultar las plantillas sin procesar hasta que el componente esté listo.Ejemplo
css[v-cloak] { display: none; }
template<div v-cloak> {{ message }} </div>
El elemento
<div>
no será visible hasta que la compilación haya terminado.