【发布时间】:2020-08-04 16:15:23
【问题描述】:
我有一个手风琴列表,当你点击一个项目时,所有项目都会打开,我只需要打开一个,
我知道需要一个循环来迭代所有项目并将类应用于特定项目,但是如何做到这一点,请帮助
组件:
<ul class="accordion accordion__trigger"
:class="{'accordion__trigger_active': visible}"
@click="open">
<li class="accordion__item" v-for="category in MAIN_CATS">
<nuxt-link exact no-prefetch active-class="link-active"
:to="`/category/${category.id}`"
class="menu-button">
{{ category.title }}
</nuxt-link>
<div class="accordion__content">
<div class="menu-sub-list" v-show="visible">
<ul class="sub-list">
<li class="menu-item"
v-for="sub in SUB_CATS(category.id)"
:key="sub.id">
<nuxt-link :to="`/category/${sub.id}`" class="menu-button">
{{ sub.title }}
</nuxt-link>
</li>
</ul>
</div>
</div>
</li>
</ul>
代码:
name: "acc",
data() {
return {
index: null,
Accordion: {
count: 0,
active: null
}
};
},
computed: {
...mapGetters([
'MAIN_CATS',
'SUB_CATS'
]),
visible() {
return this.index === this.Accordion.active;
}
},
methods: {
...mapActions([
'GET_CATEGORIES_LIST',
]),
open() {
if (this.visible) {
this.Accordion.active = null;
} else {
this.Accordion.active = this.index;
}
},
start(el) {
el.style.height = el.scrollHeight + "px";
},
end(el) {
el.style.height = "";
}
},
created() {
this.index = this.Accordion.count++;
},
mounted() {
this.GET_CATEGORIES_LIST()
},
我有一个手风琴列表,当你点击一个项目时,所有项目都会打开,我只需要打开一个, 我知道需要一个循环来遍历所有项目并将类应用于特定项目,但是如何做到这一点,请帮助
【问题讨论】:
-
现在您的点击处理程序是整个
ul元素,所以无论您点击什么都会触发该方法。然后,您只需将this.index设置为活动值。看起来index总是为空?或者你是怎么设置的?此外,由于可见性是计算的,它只能是真或假。但是您需要为循环中的每个项目设置不同的值。使用一种方法来获取当前索引并在循环中使用该方法,或者更好地创建一个计算列表并为每个条目添加一个可见值。