- Aprender
-
Ecosistema
Ayuda
Herramientas
Librerías Oficiales
Noticias
Lista de Recursos
- Equipo
- Apoyar Vue
- Traducciones
Guía
Conocimientos Esenciales
- Instalación
- Introducción
- La instancia Vue
- Sintaxis de Template
- Propiedades Computadas y Observadores
- Enlace Clases y Estilos
- Renderización Condicional
- Renderizado de lista
- Manejo de eventos
- Binding en Formularios
- Conceptos Básicos de Componentes
Transiciones & Animaciones
- Efectos de Transición
Componentes en Profundidad
- Registro de Componente
- Propiedades
- Eventos personalizados
- Slots
- Componentes Dinámicos & Asíncronos
- Handling Edge Cases
- Transiciones de estado
Reusabilidad & Composición
- Mixins
- Directivas Personalizadas
- Funciones de renderizado & JSX
- Plugins
- Filtros
- Publicación en Producción
Herramientas
- Componentes de un Solo Archivo (Single File Components)
- Testing Unitario
- Soporte TypeScript
Escalando la Aplicación
- Enrutamiento
- Administración del Estado
- Renderizado del lado de Servidor
Funcionamiento Interno
- Reactividad en profundidad
Migraciones
- Migración desde Vue 1.x
- Migración desde Vue Router 0.7.x
- Migración de Vuex 0.6.x a 1.0
Meta Documentación
- Comparación con otros frameworks
- Únete a la comunidad Vue.js!
- Conozca al equipo
Binding en Formularios
Uso básico
Puede usar la directiva v-model
para crear bindings de datos bidireccionales (two-way binding) en elementos input, textarea y select de un formulario. La directiva busca automáticamente la manera correcta de actualizar el elemento según el tipo de entrada. Aunque un poco mágico, v-model
es esencialmente syntax sugar para actualización de datos a través de eventos de entradas del usuario, además de mostrar un cuidado especial para algunos casos de borde.
v-model
ignorará el value
inicial, los atributos checked
o selected
que se encuentran en cualquier elemento de formulario. Siempre tratará los datos de la instancia de Vue como la fuente confiable. Debe declarar el valor inicial del lado de JavaScript, dentro de la opción data
de su componente.
Para los idiomas que requieren un IME (chino, japonés, coreano, etc.), notará que el v-model
no se actualiza durante la composición del IME. Si también desea atender estas actualizaciones, use un evento input
en su lugar.
Input
<input v-model="message" placeholder="edíteme"> |
El mensaje es: {{ message }}
Textarea
<span>El mensaje multilínea es:</span> |
{{ message }}
La interpolación en textareas no funciona (<textarea>{{text}}</textarea>
). En su lugar use v-model
.
Checkbox
Checkbox simples con valor booleano:
<input type="checkbox" id="checkbox" v-model="checked"> |
Múltiples checkboxes vinculados al mismo Array:
<div id='example-3'> |
new Vue({ |
Nombres Checked: {{ checkedNames }}
Radio
<input type="radio" id="uno" value="Uno" v-model="picked"> |
Eligió: {{ picked }}
Select
Selección de un solo elemento:
<select v-model="selected"> |
new Vue({ |
Si el valor inicial de su expresión v-model
no coincide con ninguna de las opciones, el elemento <select>
se representará en un estado “unselected”. En iOS, esto hará que el usuario no pueda seleccionar el primer elemento porque iOS no dispara un evento de cambio en este caso. Por lo tanto, se recomienda proporcionar una opción deshabilitada con un valor vacío, como se muestra en el ejemplo anterior.
Selección de múltiples elementos (vinculando a un Array):
<select v-model="selected" multiple> |
Seleccionados: {{ selected }}
Opciones dinámicas renderizadas con v-for
:
<select v-model="selected"> |
new Vue({ |
Vinculando a Valores
Para radio, checkbox y option de select, los valores de vinculación del v-model
suelen ser cadenas estáticas (o booleanos para checkbox):
<!-- `picked` es una cadena "a" cuando está chequeado --> |
Pero a veces es posible que queramos vincular el valor a una propiedad dinámica en la instancia de Vue. Podemos usar v-bind
para lograr eso. Además, el uso de v-bind
nos permite vincular el valor de entrada a valores no cadena.
Checkbox
<input |
// cuando está marcado: |
Los atributos de true-value
y de false-value
no afectan la entrada del atributo value
, ya que los navegadores no incluyen casillas sin marcar en los envíos de formularios. Para garantizar que uno de los dos valores se envie en un formulario (por ejemplo, “yes” o “no”), use entradas de radio en su lugar.
Radio
<input type="radio" v-model="pick" v-bind:value="a"> |
// cuando está marcado: |
Select
<select v-model="selected"> |
// cuando está seleccionado: |
Modificadores
.lazy
De forma predeterminada, v-model
sincroniza el input
con los datos después de cada evento de tipo input
(con la excepción de la composición IME descrito anteriormente). En lugar de esto, puede agregar el modificador lazy
para realizar la sincronización después del evento change
:
<!-- sincronizado después de "change" en lugar de "input" --> |
.number
Si desea que las entradas del usuario se escriban automáticamente como un número, puede agregar el modificador number
al v-model
del elemento:
<input v-model.number="age" type="number"> |
Esto suele ser útil, porque incluso con type="number"
, el valor retornado por el elemento HTML siempre es una cadena de texto. Si el valor no se puede analizar con parseFloat()
, se retorna el valor original.
.trim
Si desea que las entradas del usuario se recorten automáticamente, puede agregar el modificador trim
al v-model
de su elemento:
<input v-model.trim="msg"> |
v-model
con Componentes
Si aún no está familiarizado con los componentes de Vue, puede omitir esto por ahora.
Los tipos de input nativos de HTML no siempre satisfarán sus necesidades. Afortunadamente, los componentes de Vue le permiten crear input reutilizables con un comportamiento completamente personalizado. Estos componentes también funcionan con v-model
! Para aprender más, lea acerca de inputs personalizados en la guía de componentes.