折叠面板组件代码:
template:
<template>
<div>
<div class="panel" v-for="(item, index) in list">
<div class="panel-header" @click="togglePanel(index)">
<span>{{ item.title }}</span>
<i :class="item.show ? 'iconfont icon-xiangxia' : 'iconfont icon-xiangyou'"></i>
</div>
<div class="panel-content" v-show="item.show">
{{ item.content }}
</div>
</div>
</div>
</template>
script:
<script>
export default {
props: {
list: {
type: Array,
required: true
}
},
methods: {
togglePanel(index) {
this.list[index].show = !this.list[index].show;
}
}
}
</script>
style:
<style scoped>
.panel {
margin: 10px auto;
border: 1px solid #ddd;
border-radius: 4px;
}
.panel-header {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #f5f5f5;
padding: 10px;
cursor: pointer;
}
.panel-content {
padding: 10px;
background-color: #fff;
overflow: hidden;
transition: height 0.3s ease-in-out;
}
</style>
使用方法:
<template>
<div>
<fold-panel :list="list"></fold-panel>
</div>
</template>
<script>
import FoldPanel from '@/components/FoldPanel.vue'
export default {
components: {
FoldPanel
},
data() {
return {
list: [
{
title: '标题1',
content: '内容1',
show: false
},
{
title: '标题2',
content: '内容2',
show: false
}
]
}
}
}
</script>