问题描述
我的数据库中有一个属性列表。我希望用户选择房产中的房屋类型。
财产 | 选定的属性类型 |
---|---|
属性 1 | ['studio_apartment','one_bedroom','two_bedroom'] |
属性 2 | ['studio_apartment','one_bedroom'] |
为了实现这一点,我使用了 Vue v-for 循环,如下所示:
<template>
<div v-for="(name,index) in propertyNames" :key="index">
NAME: {{ name }}<br />
<input
type="checkBox"
value="studio_apartment"
v-model="form.property_type"
/>Studio apartment<br />
<input
type="checkBox"
value="one_bedroom"
v-model="form.property_type"
/>One bedroom<br />
<input
type="checkBox"
value="two_bedroom"
v-model="form.property_type"
/>Two bedroom<br />
SELECTED: {{}}
</div>
</template>
<script>
import { mapGetters,mapActions } from "vuex";
export default {
data() {
return {
form: {
property_type: [],},};
},</script>
问题是当我在属性 1 中选择例如 studio_apartment
时,所有属性 studio_apartment
都会被检查。我如何只分别为每个属性获取选定的复选框。谢谢。
解决方法
发生这种情况是因为在每次循环迭代中只有一个 form
实例被共享。
你可以将form
改为基于propertyNames
的对象数组,使它们具有相同的数组长度;然后用 form
的迭代 index
索引到 v-for
:
<template>
<div>
<div v-for="(name,index) in propertyNames" :key="index">
NAME: {{ name }}<br>
<input type="checkbox" value="studio_apartment" v-model="form[index].property_type">Studio apartment<br>
<input type="checkbox" value="one_bedroom" v-model="form[index].property_type">One bedroom<br>
<input type="checkbox" value="two_bedroom" v-model="form[index].property_type">Two bedroom<br>
</div>
</div>
</template>
<script>
export default {
data() {
const propertyNames = ['Property 1','Property 2']
return {
propertyNames,form: propertyNames.map(name => ({ property_type: [] }))
}
}
}
</script>