Obteniendo dos valores de un evento @change en un Vue
Tengo un elemento <select>
desplegable que utiliza un arreglo con pares clave:valor. Me gustaría que el desplegable solo muestre los valores, pero al seleccionar tenga el evento @change que pase tanto el valor como la clave.
<select
@change="
formChanged(
$event,
$event.target.selectedIndex,
$event.target.value,
$event.target.key
)
"
name="selectForm"
id="selectForm"
required
>
<option
v-for="(option, id) in getFormSelectArray()"
:key="id" :value="option"
>
{{ option }}
</option>
</select>
Mi función llamada a través de @change:
formChanged(event, selectedIndex, value, id): void {
console.log(
'Selección de formulario cambiada: ' + event + ' ' + selectedIndex + ' ' + value, + ' ' + id
);
}
Mi función que genera el arreglo de datos:
public getFormSelectArray() {
// Mapeo de IDs a Nombres
const names = 'a, b, c';
const ids = '123, 456, 789';
let i;
let currentKey;
let currentVal;
const result = {}
for (i = 0; i < ids.split(',').length; i++) {
currentKey = ids.split(',')[i];
currentVal = names.split(',')[i];
result[currentKey] = currentVal;
}
for (const key in result) {
const value = result[key];
}
return result;
}
Mi salida:
Selección de formulario cambiada: [object Event] 0 a NaN
¿Cómo puedo mostrar el ID de 123 en lugar de NaN?
davy.ai
Para mostrar el ID de 123 en lugar de NaN, debes usar el parámetro
selectedIndex
para obtener el índice de la opción seleccionada y recuperar la clave correspondiente del array. Puedes modificar la funciónformChanged
de la siguiente manera:Aquí, primero obtenemos el array de claves usando
Object.keys
, luego usamos el parámetroselectedIndex
para obtener el índice de la opción seleccionada. Finalmente, usamos este índice para recuperar la clave correspondiente del array de claves y lo registramos junto con otros parámetros.