Skip to content

Collapse 折叠面板

实现内容区域的折叠和展开,用于收纳长内容。

基础用法

通过 NueCollapseNueCollapseItem 组件,实现内容区域的折叠和展开。

面板状态

NueCollapse 折叠面板容器组件中,允许通过 v-model 绑定一个响应式数据用于记录或控制每个面板的展开状态,值类型为 string[]string(手风琴模式)。其中会记录当前所展开的 NueCollapseItem 折叠面板组件的标识符,该标识符可以在 NueCollapseItem 折叠面板组件上通过 name 属性指定。

<template>
    <nue-div align="stretch" vertical>
        <nue-collapse v-model="activeNames">
            <nue-collapse-item name="Collapse item A" title="折叠面板组件 A">
                <nue-text>Collapse item A</nue-text>
            </nue-collapse-item>
            <nue-collapse-item name="Collapse item B" title="折叠面板组件 B">
                <nue-text>Collapse item B</nue-text>
            </nue-collapse-item>
        </nue-collapse>
        <nue-div>已展开的面板: {{ activeNames }}</nue-div>
    </nue-div>
</template>

<script setup>
import { ref } from 'vue';

const activeNames = ref([]);
</script>

手风琴模式

通过属性 accordion 设置是否开启手风琴模式,开启后有且只能有一个面板可以被展开。

TIP

手风琴模式下仅有一个面板能够内展开,因此 v-model 的值只会是 string 类型,若传入 string[] 类型,最终也会被修改为 string 类型。

<template>
    <nue-div align="stretch" vertical>
        <nue-collapse v-model="activeNames" accordion>
            <nue-collapse-item name="Collapse item A" title="折叠面板组件 A">
                <nue-text>Collapse item A</nue-text>
            </nue-collapse-item>
            <nue-collapse-item name="Collapse item B" title="折叠面板组件 B">
                <nue-text>Collapse item B</nue-text>
            </nue-collapse-item>
        </nue-collapse>
        <nue-div>已展开的面板: {{ activeNames }}</nue-div>
    </nue-div>
</template>

<script setup>
import { ref } from 'vue';

const activeNames = ref(['Collapse item A']);
</script>

自定义标题

通过 title 属性自定义面板的标题。

也可以通过 header 这个作用域插槽自定义面板的头部。解构出来的 collpase 函数操作该面板的展开和收起;state 获取面板展开状态。

<template>
    <nue-collapse>
        <nue-collapse-item title="自定标题">
            <nue-text>Lorem ipsum dolor sit amet, consectetur elit.</nue-text>
        </nue-collapse-item>
        <nue-collapse-item>
            <template #header="{ collapse, state }">
                <nue-div align="center" gap=".25rem">
                    <nue-icon
                        size=".875rem"
                        :name="state ? 'arrow-right' : 'arrow-down'"
                        @click="collapse"
                    />
                    <nue-text size=".875rem" @click="collapse">自定义头部</nue-text>
                </nue-div>
            </template>
            <nue-text>Lorem ipsum dolor sit amet, consectetur elit.</nue-text>
        </nue-collapse-item>
    </nue-collapse>
</template>
<script setup lang="ts"></script>

Released under the MIT License.