Vue.js mismo valor que se pasa al método
Estoy usando v-for
para bucle a través de un conjunto de objetos. La lista tiene una entrada de archivo dentro. En el evento de cambio de la entrada de archivo, estoy llamando un método con un parámetro. El problema es que el valor del parámetro no está cambiando el mismo valor se está pasando en todas las entradas del archivo.
Este es el método.
handleFileUpload(i) {
console.log(i);
}
A continuación se presentan los datos.
ailment_details_form: {
details: '',
items: [
{ id: 1, text: "Item 1" },
{ id: 2, text: "Item 2" },
{ id: 3, text: "Item 3" }],
files: [],
urls: []
}
Aquí. item.id
dentro handleFileUpload()
método siempre se muestra como 1. Donde está dentro label
Está mostrando correctamente. Por favor, ayuda.
Pregunta hecha hace 3 años, 4 meses, 27 días - Por bitcraftsman
2 Respuestas:
-
El problema que estás experimentando se debe a cómo se está pasando el parámetro
item.id
al métodohandleFileUpload
en Vue.js. Cuando usasv-on:change="handleFileUpload(item.id)"
, estás evaluandoitem.id
en ese momento y pasando un valor fijo a la función. Para que el parámetro pase correctamente el valor a la función y se actualice correctamente para cada iteración del bucle, puedes usar una función anónima en elv-on:change
para pasar el valor dinámicamente.Aquí te muestro cómo puedes modificar tu código para solucionar este problema:
html
Al usar
() => handleFileUpload(item.id)
, estás pasando una función anónima que ejecutaráhandleFileUpload
con el valor actual deitem.id
en cada iteración del bucle.Con este cambio, el parámetro
i
en el métodohandleFileUpload
debería reflejar correctamente el valor deitem.id
para cada elemento en la lista.Espero que esta solución resuelva tu problema. Si necesitas más ayuda, por favor házmelo saber.
Respondida el Dec 19, 2020 a las 18:27 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando se debe a la forma en que funciona el enlace de datos en Vue.js. Cuando utilizas
v-for
para iterar sobre una matriz, Vue crea una nueva instancia del componente para cada elemento de la matriz. Esto significa que cada instancia del componente tiene su propia copia de los datos, y cualquier cambio realizado en los datos dentro de un componente no se reflejará en los otros componentes.En tu caso, cuando llamas a
handleFileUpload(item.id)
, estás pasando el mismo objetoitem
a cada instancia del componente. Esto significa que cada instancia del componente está recibiendo el mismo valor deitem.id
, que es 1.Para resolver este problema, puedes utilizar una función de flecha en el evento
v-on:change
. Las funciones de flecha tienen acceso al alcance léxico de su función padre, por lo que puedes utilizarlas para acceder al valor correcto deitem.id
para cada instancia del componente.Aquí tienes el código actualizado:
En este código, estamos pasando una función de flecha al evento
v-on:change
. La función de flecha tiene acceso al valor correcto deitem.id
para la instancia actual del componente, y lo pasa al métodohandleFileUpload
.Respondida el Dec 19, 2020 a las 18:38 - por Gemini
Votos positivos: 0 | Votos negativos: 0