[英]VueJS How to show/hide closest hidden element in list of items
如何通過單擊vue
中的按鈕來顯示/隱藏最近的 div ?
假設我有一個項目列表,每個項目都有一些隱藏的細節
<ul>
<li v-for="item in items" :key="item.id">
<div>
<p>{{item.text}}</p>
<button @click="showDetails(item)">Show details</div>
<div class="details" :class="isVisible ? activeClass : 'hidden'">Some hidden details</div>
</div>
</li>
</ul>
然后我做
data() {
return {
items: [ // a bunch of item objects here]
isVisible: false,
activeClass: 'is-visible'
}
},
methods: {
showDetails(item) {
this.isVisible = item;
}
}
現在,當我單擊“showDetails”按鈕時,所有帶有 class .details
的 div 都會打開並獲得 .is .is-visible
-class,但我只想顯示最接近該項目的 div。 出於某種原因,我認為這很簡單,但我無法讓它工作。
我怎樣才能做到這一點?
為列表項創建一個包含所有邏輯本身的新組件會更清晰。 就像是:
// ListItem.vue
<template>
<div>
<p>{{text}}</p>
<button @click="toggleVisibility">Show details</button>
<div class="details" v-show="isVisible">Some hidden details</div>
</div>
</template>
<script>
props: {
text: String
},
data() {
return {
isVisible: false
}
},
methods: {
toggleVisibility() {
this.isVisible = !this.isVisible
}
}
</script>
並在您的父組件中:
<ul>
<li v-for="item in items" :text="item.text" :key="item.id" is="list-item" /></li>
</ul>
data() {
return {
items: [ // a bunch of item objects here]
}
}
只需將“isVisible”變量存儲在“項目”中
<ul>
<li v-for="item in items" :key="item.id">
<div>
<p>{{item.text}}</p>
<button @click="showDetails(item)">Show details</div>
<div class="details" :class="item.isVisible ? activeClass : 'hidden'">Some hidden details</div>
</div>
</li>
</ul>
data() {
return {
items: [ // a bunch of item objects here]
isVisible: false,
activeClass: 'is-visible'
}
},
methods: {
showDetails(item) {
item.isVisible = !item.isVisible;
this.$forceUpdate();
}
}
嘗試這個
<template> <ul> <li v-for="(item, i) in items":key="item.id"> <div> <p>{{item.text}}</p> <button @click="showDetails(i)">Show details</button> <div class="details":class="i == active? activeClass: 'hidden'">Some hidden details</div> </div> </li> </ul> </template> <script> export default { data() { return { items: [], activeClass: 'is-visible', active: null }; }, methods: { showDetails(i) { this.active = i; } } }; </script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.