【发布时间】:2021-06-04 15:09:25
【问题描述】:
我有一个 <select> HTML 元素,我想将它 v-model 绑定到 Vue.js 3 的 setup() 方法中的 ref 值。因此,当用户选择不同的选项时,Form.ProductID 引用会更新。
这里是<select> 代码:
<select v-model="Form.ProductID" id="ProductID" name="ProductID">
<option value="1">Option A</option>
<option value="2">Option B</option>
<option value="3">Option C</option>
</select>
还有setup():
export default {
name: "ComponentProductSelector",
setup() {
const Form = ref({
ProductID: '2',
Price: null,
Currency: null
})
onMounted(() => Form.value.ProductID)
document.querySelector("#ProductID option:first-of-type")
}
}
在 vue devtools 中首次加载时,它显示数据为:
Form (Object Ref)
ProductID: "[object HTMLOptionElement]"
当我在 <select> 元素中选择一个选项时,Form.ProductID 会按预期更新并显示我选择了哪个选项,例如:
Form (Object Ref)
ProductID: 3
问题是在第一次加载页面时,<select> 元素没有选择带有value="2" 的选项,即使我在setup() 中对其进行了硬编码。它只是显示一个空白选项!但是,如果我将 <select> 元素更改为以下代码,则可以:
<select ref="Form.ProductID" id="ProductID" name="ProductID">
<option value="1">Option A</option>
<option value="2">Option B</option>
<option value="3">Option C</option>
</select>
现在渲染组件时默认选择带有value="2"的选项,但是Form.ProductID的实际值不会更新,vue devtools继续将ProductID: "[object HTMLOptionElement]"显示为数据。
如何让<select> 元素使用v-model 工作,并在组件加载时选择默认选项?
【问题讨论】:
-
肯定有不同的问题,应该可以工作jsfiddle.net/sh0ber/zrj18f69
-
@shob 你是对的,这是一段代码:
onMounted(() => Form.value.ProductID = document.querySelector("#ProductID option:first-of-type")默认选择第一个选项。是否可以让Form.value.ProductID等于第一个选项onMounted的值? -
为什么不将
Form.ProductID设置为 1? -
@shob 因为我不能总是知道 ID 是什么。它们最终将来自数据库作为 json
标签: javascript vue.js vuejs3 vue-composition-api vue-reactivity