Vue v-for 点击不正确显示元素
Vue v-for click not show correcly element
for` 显示数据库中的数据:
<div v-for="item in resourceList" :key="item.id">
<input :id="roomData.id" type="checkbox" @click="saveCheckbox">
<label :for="roomData.id">{{ item.question }}</label>
//calendar
<span v-if="active">
<datepicker v-model="date"></datepicker>
</span>
<span v-else id="disableCalendar">Not show calendar</span>
</div>
我的功能点击有问题。例如在页面 v-for
上显示 10 个元素。在每个元素中都会有一个单击按钮 @click="saveCheckbox"
。
方法中的函数:
saveCheckbox(e){
if(e.target.checked) {
this.active = true;
} else {
this.active = false;
}
}
在我的数据中:
active = false;
现在当用户点击第一个元素按钮时,日历将出现在每个元素中。
我如何才能仅在用户点击的元素中显示日历?
您需要在循环中存储每个项目的值。使用 this.active = true
时,您只有一种状态可用于循环中的每个项目。
示例:
new Vue({
el: "#app",
data: {
isActive: [false, false, false, false]
},
methods: {
toggleActive(index) {
this.$set(this.isActive, index, !this.isActive[index])
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div v-for="(active, index) in isActive" :key="index">
{{ active }} {{ index }}
<button type="button" @click="toggleActive(index)">Toggle</button>
</div>
</div>
active
变量为您的 resourceList 中的每个项目共享,您需要为列表中的每个项目创建活动标识符,一种方法是让 active
属性 的资源列表项。假设你在resourceList的每一项中都有active 属性,你可以进行如下操作。
<div v-for="item in resourceList" :key="item.id">
<input :id="roomData.id" type="checkbox" @click="saveCheckbox(item)">
<label :for="roomData.id">{{ item.question }}</label>
//calendar
<span v-if="active">
<datepicker v-model="date"></datepicker>
</span>
<span v-else id="disableCalendar">Not show calendar</span>
</div>
和 saveCheckbox 方法
saveCheckbox(item){
item.active = !item.active
}
for` 显示数据库中的数据:
<div v-for="item in resourceList" :key="item.id">
<input :id="roomData.id" type="checkbox" @click="saveCheckbox">
<label :for="roomData.id">{{ item.question }}</label>
//calendar
<span v-if="active">
<datepicker v-model="date"></datepicker>
</span>
<span v-else id="disableCalendar">Not show calendar</span>
</div>
我的功能点击有问题。例如在页面 v-for
上显示 10 个元素。在每个元素中都会有一个单击按钮 @click="saveCheckbox"
。
方法中的函数:
saveCheckbox(e){
if(e.target.checked) {
this.active = true;
} else {
this.active = false;
}
}
在我的数据中:
active = false;
现在当用户点击第一个元素按钮时,日历将出现在每个元素中。 我如何才能仅在用户点击的元素中显示日历?
您需要在循环中存储每个项目的值。使用 this.active = true
时,您只有一种状态可用于循环中的每个项目。
示例:
new Vue({
el: "#app",
data: {
isActive: [false, false, false, false]
},
methods: {
toggleActive(index) {
this.$set(this.isActive, index, !this.isActive[index])
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div v-for="(active, index) in isActive" :key="index">
{{ active }} {{ index }}
<button type="button" @click="toggleActive(index)">Toggle</button>
</div>
</div>
active
变量为您的 resourceList 中的每个项目共享,您需要为列表中的每个项目创建活动标识符,一种方法是让 active
属性 的资源列表项。假设你在resourceList的每一项中都有active 属性,你可以进行如下操作。
<div v-for="item in resourceList" :key="item.id">
<input :id="roomData.id" type="checkbox" @click="saveCheckbox(item)">
<label :for="roomData.id">{{ item.question }}</label>
//calendar
<span v-if="active">
<datepicker v-model="date"></datepicker>
</span>
<span v-else id="disableCalendar">Not show calendar</span>
</div>
和 saveCheckbox 方法
saveCheckbox(item){
item.active = !item.active
}