Vuetify中v-select不使用v-model如何获取item-value?
解决v-for循环中v-select获取选中item-value的问题
嘿,这个问题其实很好解决,我之前也遇到过类似的场景,给你两种实用的处理方法:
方法一:直接通过@change事件接收选中值和索引
@change事件本身会自动传递当前选中的item-value值(因为你设置了item-value="id")作为参数,你只需要在回调里同时接收索引和选中值就行:
修改你的模板代码:
<v-flex xl4 lg4 md4 sm6 xs12 class="pa-2" v-for="(question, i) in questions" :key="i"> <v-select :label="question.name" :items="question.answers" item-value="id" item-text="name" @change="(selectedId) => addAnswer(i, selectedId)" required ></v-select> </v-flex>
然后在你的methods里处理这个方法:
methods: { addAnswer(index, selectedId) { // 这里的selectedId就是你要的选中项的id(item-value对应的值) console.log(`第${index+1}个问题选中的ID是:`, selectedId); // 接下来就可以根据索引和选中ID做你需要的业务逻辑啦 } }
方法二:用v-model绑定数组(更符合Vue响应式思想)
如果你需要实时获取所有问题的选中值,或者更倾向于Vue的双向绑定方式,可以声明一个数组来存储每个问题的选中结果:
首先在data里定义存储选中值的数组:
data() { return { questions: [], // 你的问题列表数组 selectedAnswers: [] // 对应每个问题的选中ID,索引和questions一一对应 } }
然后修改模板,用v-model绑定到数组的对应索引:
<v-flex xl4 lg4 md4 sm6 xs12 class="pa-2" v-for="(question, i) in questions" :key="i"> <v-select :label="question.name" :items="question.answers" item-value="id" item-text="name" v-model="selectedAnswers[i]" required ></v-select> </v-flex>
这样一来,selectedAnswers数组会自动同步每个v-select的选中值,你可以随时在组件的任何地方访问这个数组获取所有选中的ID。如果需要在选中变化时执行逻辑,还可以配合@change或者watch监听selectedAnswers的变化。
内容的提问来源于stack exchange,提问作者bobger
相关产品推荐
相关产品推荐

