Skip to content

Drawer 抽屉

抽屉组件用于在屏幕上显示临时内容,从而提供额外的操作或信息。

基础用法

通过标签 <NueDrawer> 创建一个抽屉。

显示隐藏控制

抽屉组件需要使用 v-model 传入一个响应式属性用于控制抽屉的显示和隐藏。

通过属性 title 设置抽屉的标题。属性值类型为 string

<template>
    <nue-button @click="basic.visible = true">打开抽屉</nue-button>
    <nue-drawer v-model="basic.visible" title="基础抽屉">
        <nue-div style="padding: 1rem">基础抽屉</nue-div>
    </nue-drawer>
</template>

<script setup lang="ts">
import { reactive } from 'vue';

const basic = reactive({ visible: false });
</script>

打开方向

通过属性 open-from 设置抽屉组件打开的方向。属性可选值为 leftrighttopbottom,默认值为 right

<template>
    <nue-div>
        <nue-button @click="direction.visible1 = true">打开抽屉(上)</nue-button>
        <nue-button @click="direction.visible2 = true">打开抽屉(左)</nue-button>
        <nue-button @click="direction.visible3 = true">打开抽屉(下)</nue-button>
    </nue-div>
    <nue-drawer v-model="direction.visible1" open-from="top" title="定义了打开方向的抽屉">
        <nue-div style="padding: 1rem">从上方打开的抽屉</nue-div>
    </nue-drawer>
    <nue-drawer v-model="direction.visible2" open-from="left" title="定义了打开方向的抽屉">
        <nue-div style="padding: 1rem">从左侧打开的抽屉</nue-div>
    </nue-drawer>
    <nue-drawer v-model="direction.visible3" open-from="bottom" title="定义了打开方向的抽屉">
        <nue-div style="padding: 1rem">从下方打开的抽屉</nue-div>
    </nue-drawer>
</template>

<script lang="ts" setup>
import { reactive } from 'vue';

const direction = reactive({
    visible1: false,
    visible2: false,
    visible3: false
});
</script>

展开范围以及最小展开范围

通过属性 spanmin-span 分别设置抽屉的展开范围以及最小展开范围。

spanmin-span 属性接收 string 类型的值,具体应用到 CSS 的 widthheightmin-widthmin-height 这些属性上。

TIP

  • 由于抽屉的开启方向可以是上下左右四个方向,因此在上下方向时,spanmin-span 分别指的是高度和最小高度;在左右方向时,spanmin-span 分别指的是宽度和最小宽度。
  • spanmin-span 的效果会在视口发生变化时体现出来。

<template>
    <nue-button @click="drawerState = true">打开抽屉</nue-button>
    <nue-drawer v-model="drawerState" title="抽屉标题" span="60%" min-span="360px">
        <nue-div style="padding: 1rem">基础抽屉</nue-div>
    </nue-drawer>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const drawerState = ref(false);
</script>

允许通过遮罩层关闭抽屉

抽屉组件默认不允许点击组件遮罩层区域触发关闭动作,通过属性 allow-close-by-overlay 设置允许通过点击遮罩层关闭。

<template>
    <nue-button @click="drawerState = true">打开抽屉</nue-button>
    <nue-drawer v-model="drawerState" allow-close-by-overlay title="基础抽屉">
        <nue-div style="padding: 1rem">基础抽屉</nue-div>
    </nue-drawer>
</template>

<script lang="ts" setup>
import { ref } from 'vue';

const drawerState = ref(false);
</script>

自定义头部、主体以及底部

通过指定插槽完成对应内容的自定义。

  • header 插槽用于自定义抽屉的头部内容。头部插槽可以解构出 close 方法用于关闭抽屉。
  • default 默认插槽用于自定义抽屉的主体内容。
  • footer 插槽用于自定义抽屉的底部内容。

<template>
    <nue-button @click="drawerState = true">打开抽屉</nue-button>
    <nue-drawer v-model="drawerState" title="抽屉标题">
        <template #header="{ close }">
            <nue-div align="center" justify="space-between">
                <nue-text>自定义头部</nue-text>
                <nue-button theme="pure" @click="close">关闭</nue-button>
            </nue-div>
        </template>
        <template #default>
            <nue-div style="padding: 1rem">自定义主体</nue-div>
        </template>
        <template #footer>
            <nue-div>自定义底部</nue-div>
        </template>
    </nue-drawer>
</template>

<script lang="ts" setup>
import { ref } from 'vue';

const drawerState = ref(false);
</script>

连续打开多个抽屉

抽屉组件可以连续使用,在同一个页面上可以打开多个抽屉,这些抽屉元素会根据打开顺序进行显示而非文档结构。

<template>
    <nue-div>
        <nue-button @click="drawer1State = true">打开抽屉1</nue-button>
        <nue-button @click="drawer2State = true">打开抽屉2</nue-button>
    </nue-div>
    <nue-drawer v-model="drawer1State" title="抽屉1">
        <nue-button @click="drawer2State = true">打开抽屉2</nue-button>
    </nue-drawer>
    <nue-drawer v-model="drawer2State" open-from="left" title="抽屉2">
        <nue-button @click="drawer1State = true">打开抽屉1</nue-button>
    </nue-drawer>
</template>

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

const drawer1State = ref(false);
const drawer2State = ref(false);
</script>

Released under the MIT License.