Skip to content

Collapse 折叠面板

介绍

将一组内容放置在多个折叠面板中,点击面板的标题可以展开或收缩其内容。

基础用法

通过 v-model 属性设置索引数组来控制面板子级的展开,该值不完全受控,可通过 beforeToggle 取得实际控制。

html
<vd-collapse v-model="collapse">
  <vd-collapse-item title="标题1">内容1</vd-collapse-item>
  <vd-collapse-item title="标题2">内容2</vd-collapse-item>
  <vd-collapse-item title="标题3">内容3</vd-collapse-item>
</vd-collapse>
ts
const collapse = ref([0]);

设置名称

通过 name 属性设置名称,设置后以名称代替索引值。

html
<vd-collapse v-model="collapse">
  <vd-collapse-item name="1" title="标题1">内容1</vd-collapse-item>
  <vd-collapse-item name="2" title="标题2">内容2</vd-collapse-item>
  <vd-collapse-item name="3" title="标题3">内容3</vd-collapse-item>
</vd-collapse>
ts
const collapse = ref(['1']);

手风琴模式

通过 accordion 属性设置手风琴模式,该模式下,每次只能展开一个面板。

html
<vd-collaps v-model="collapse" accordion>
  <vd-collapse-item name="1" title="标题1">内容1</vd-collapse-item>
  <vd-collapse-item name="2" title="标题2">内容2</vd-collapse-item>
  <vd-collapse-item name="3" title="标题3">内容3</vd-collapse-item>
</vd-collapse>
ts
const collapse = ref('1');

异步切换

通过 before-toggle 属性设置切换前的回调函数,函数返回 false 可以取消切换。

html
<vd-collaps v-model="collapse" :before-toggle="beforeToggle">
  <vd-collapse-item name="1" title="展开时请求">模拟500ms请求</vd-collapse-item>
  <vd-collapse-item name="2" title="折叠时请求">模拟1000ms请求</vd-collapse-item>
  <vd-collapse-item name="3" title="展开、折叠时请求">模拟1500ms请求</vd-collapse-item>
  <vd-collapse-item name="4" title="阻止折叠">只可展开,不可折叠</vd-collapse-item>
</vd-collapse>
ts
import { CollapseBeforeToggle } from 'vital-design';
import { Numeric } from '@vital-design/shared';

const collapse = ref<string[]>([]);

// 切换前
const beforeToggle: CollapseBeforeToggle = async (name, expanded) => {
  // 展开时请求
  if (expanded && name === '1') {
    await timeout(500); // 模拟500ms请求
  }

  // 折叠时请求
  if (!expanded && name === '2') {
    await timeout(1000); // 模拟1000ms请求
  }

  // 展开、折叠时请求
  if (name === '3') {
    await timeout(1500); // 模拟1500ms请求
  }

  // 阻止折叠
  if (!expanded && name === '4') {
    return false;
  }
}

手动控制全部展开

通过组件提供的 toggleAll 方法设置手动控制切换全部展开。

html
<vd-collapse ref="collapseRef" v-model="collapse">
  <vd-collapse-item name="1" title="标题1">内容1</vd-collapse-item>
  <vd-collapse-item name="2" title="标题2">内容2</vd-collapse-item>
  <vd-collapse-item name="3" title="标题3">内容3</vd-collapse-item>
</vd-collapse>
ts
const collapseRef = shallowRef();
const collapse = ref<string[]>([]);

// 切换全部
function toggleAll() {
  return collapseRef.value.toggleAll();
}

// 全部展开
function expandAll() {
  return collapseRef.value.toggleAll(true);
}

// 全部折叠
function collapseAll() {
  return collapseRef.value.toggleAll(false);
}

API

Collapse Props

参数说明类型默认值
v-model展开的子级索引/名称组string | number | (string | number)[]-
duration动画时长string | number300
accordion是否开启手风琴模式booleanfalse
disabled是否禁用booleanfalse
before-toggle切换前的回调函数,支持 PromiseCollapseBeforeToggle-
lazy-render是否懒渲染booleantrue

CollapseItem Props

参数说明类型默认值
title标题string-
name标签名称,作为匹配的标识符string | number-
duration动画时长string | number300
disabled是否禁用booleanfalse
lazy-render是否懒渲染booleantrue

代替原始 Props

参数说明类型默认值
custom-id根节点idstring-
custom-class根节点类名ClassValue-
custom-style根节点样式StyleValue-

Collapse Events

事件名说明回调参数
click点击时触发MouseEvent
change切换时触发string | number | (string | number)[]

CollapseItem Events

事件名说明回调参数
click点击时触发MouseEvent
open打开时触发-
opened打开动画结束时触发-
close关闭时触发-
closed关闭动画结束时触发-

Collapse Slots

名称说明
default折叠面板内容

CollapseItem Slots

名称说明
header面板头部
title面板头部标题
loading面板头部加载中
arrow面板头部折叠图标
default面板内容

Collapse Expose

方法名说明参数返回值
toggle切换展开name: Numeric, option?: boolean | CollapseToggleOption-
toggleAll切换全部展开expanded?: boolean | undefined-

CollapseItem Expose

方法名说明参数返回值
toggle切换展开expanded?: boolean | undefined-

赣ICP备2025061025号-1