Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

193
Vistas
Hacer que v-model:value sea perezoso

Tengo un componente Vue simple, que proviene de un paquete de terceros.

El componente es un editor de texto y tengo que proporcionarle un valor para que se represente correctamente.

 <SomeComponent v-model:value="text" /> <script setup> const props = { records: { type: Object, }, } const text = computed(() => props.records.first()) </script>

Ahora, quiero actualizar mi base de datos cada vez que se cambia la propiedad de text .

 watch(text, () => { //Post to database... })

Sin embargo, no quiero actualizar la base de datos con cada pulsación de tecla; por lo tanto, quiero que el v-model sea perezoso. Esto que estoy tratando de hacer así:

 <SomeComponent v-model:value.lazy="text" />

Sin embargo, esto no funciona. El código dentro de mi método de watch se activa con cada pulsación de tecla.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Como se muestra en la documentación , v-model es solo una sintaxis de azúcar.

para que sean iguales

 <input v-model="text"> <input :value="text" @input="event => text = event.target.value">

Si desea que su componente se actualice en el evento de cambio, puede usar algo como esto

 <SomeComponent :value="text" @change="event => text = event.target.value" />

O este mas bien

 <SomeComponent v-model.lazy="text" /> <!-- text is the getter and the setter here -->

Como se muestra en la documentación: https://vuejs.org/guide/essentials/forms.html#lazy


Si desea algo aún más avanzado, podría considerar eliminar el rebote de sus entradas (más trabajo, pero es un poco más inteligente en el manejo de cuándo actualizar el estado).

about 4 years ago · Juan Pablo Isaza Denunciar

0

  1. No necesita usar v-model:value="text" , solo v-model="text" es suficiente.

  2. Si quisiera que la entrada fuera perezosa, sin ninguna funcionalidad adicional (como publicar en la base de datos en cada cambio), entonces v-model.lazy="text" sería suficiente.

  3. Al usar watch , no importa si su entrada se actualiza de forma perezosa o instantánea. El observador observa todos y cada uno de los cambios, es decir, cada pulsación de tecla en el caso de una entrada.


Entonces, si desea hacerlo perezoso y hacer una llamada a DB en cada cambio, entonces necesita esto:

 <SomeComponent :value="text" @change="onChange">\ <script setup> const onChange = (event) => { text.value = event.target.value; // post to DB } </script>

Si esto no funciona, entonces el sospechoso es el paquete de terceros. En cuyo caso, le sugiero que mire la documentación del paquete y vea si proporcionan un accesorio para que el editor de texto sea perezoso.

about 4 years ago · Juan Pablo Isaza Denunciar

0

El complemento de terceros no me permitió omitir la propiedad v-model:value , por lo que terminé usando el método de rebote de lodash en su lugar:

 <SomeComponent v-model:value.lazy="text" />
 watch(text, _.debounce(function () { //Post to database... }, 500));
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda