Collapse в библиотеке Element Plus — это компонент для создания сворачиваемых панелей, который позволяет управлять отображением большого объёма информации компактным и структурированным образом. Он особенно полезен при построении FAQ, меню с вложенными элементами или списков настроек.
Для использования Collapse необходимо импортировать компоненты
ElCollapse и ElCollapseItem:
import { ElCollapse, ElCollapseItem } from 'element-plus';
В Vue 3 можно использовать их глобально через
app.use(ElementPlus) или локально в компоненте через объект
components:
export default {
components: {
ElCollapse,
ElCollapseItem
}
}
Простейший пример Collapse выглядит следующим образом:
<template>
<el-collapse v-model="activeNames">
<el-collapse-item title="Панель 1" name="1">
Содержимое панели 1
</el-collapse-item>
<el-collapse-item title="Панель 2" name="2">
Содержимое панели 2
</el-collapse-item>
<el-collapse-item title="Панель 3" name="3">
Содержимое панели 3
</el-collapse-item>
</el-collapse>
</template>
<script>
export default {
data() {
return {
activeNames: ['1'] // Панель 1 открыта по умолчанию
};
}
};
</script>
v-model="activeNames" управляет состоянием открытых
панелей.name указывает уникальный идентификатор каждой
панели.Чтобы разрешить открытие нескольких панелей одновременно,
используется атрибут accordion:
<el-collapse v-model="activeNames" accordion>
<el-collapse-item title="Панель 1" name="1">Контент 1</el-collapse-item>
<el-collapse-item title="Панель 2" name="2">Контент 2</el-collapse-item>
</el-collapse>
accordion открыта может быть только одна
панель.accordion можно передавать массив
activeNames для одновременного открытия нескольких
элементов.Collapse отлично интегрируется с массивами данных и циклом
v-for:
<template>
<el-collapse v-model="activeNames">
<el-collapse-item
v-for="item in panels"
:key="item.id"
:title="item.title"
:name="item.id.toString()"
>
{{ item.content }}
</el-collapse-item>
</el-collapse>
</template>
<script>
export default {
data() {
return {
activeNames: [],
panels: [
{ id: 1, title: 'Панель A', content: 'Контент A' },
{ id: 2, title: 'Панель B', content: 'Контент B' },
{ id: 3, title: 'Панель C', content: 'Контент C' }
]
};
}
};
</script>
Collapse поддерживает кастомизацию через атрибуты:
border — отображение рамки вокруг панелей.accordion — запрет множественного открытия.value или v-model — текущие активные
панели.expand-icon — кастомная иконка раскрытия.Пример с кастомной иконкой:
<el-collapse v-model="activeNames" :expand-icon="renderIcon">
<el-collapse-item title="Панель с кастомной иконкой" name="1">
Контент панели
</el-collapse-item>
</el-collapse>
<script>
import { ArrowRight } from '@element-plus/icons-vue';
export default {
components: { ArrowRight },
data() {
return { activeNames: [] };
},
methods: {
renderIcon() {
return <ArrowRight />;
}
}
};
</script>
Открытие и закрытие панелей можно контролировать через реактивные свойства:
this.activeNames = ['2']; // открывает панель с name="2"
this.activeNames.push('3'); // открывает еще одну панель (если accordion=false)
Также можно подписываться на события:
change — вызывается при изменении состояния открытых
панелей:<el-collapse v-model="activeNames" @change="handleChange">
methods: {
handleChange(val) {
console.log('Открытые панели:', val);
}
}
v-for
с уникальными :key для предотвращения лишнего
рендеринга.v-if внутри el-collapse-item.Collapse часто комбинируют с:
Использование Collapse повышает читаемость интерфейса и упрощает работу с большими объемами данных, позволяя пользователю фокусироваться только на нужной информации.