标签导航:

Vue中select标签value值类型为何总是字符串?

深入解析vue中select标签value值类型问题

在Vue.js应用中,使用

问题:

开发者尝试从

const data = [[1, '肖明'], ['测试', 1], ["id", 5]];

<select @change="selectHandler">
  <option v-for="item in data" :key="item[0]" :value="item[0]">
    {{ item[1] }}
  </option>
</select>

const selectHandler = (e) => {
  const val = e.target.value; // val始终为字符串
};

根本原因:

HTML 元素获取的值转换为字符串。因此,即使modelValue定义为联合类型,event.target.value也无法直接返回数字。

解决方案:

最佳实践是利用Vue.js提供的v-model指令。v-model会自动处理数据类型的转换,根据modelValue的类型进行正确赋值,无需手动处理event.target.value。

import { ref } from 'vue';

const modelValueRef = ref<number | string>();

<select v-model="modelValueRef">
  <option v-for="item in data" :key="item[0]" :value="item[0]">
    {{ item[1] }}
  </option>
</select>

使用v-model后,Vue.js会自动进行类型转换,确保modelValueRef的值与定义的类型相符,代码更简洁,也更符合Vue.js的开发规范。 无需手动干预类型转换,避免了潜在的错误。