Drawer 抽屉
有些时候,Dialog
组件并不满足我们的需求,比如说,你需要一个超大的表单,又或者你需要一个类似“条款”的展示区域,Drawer
拥有和 Dialog
几乎相同的 API,在提供便利的同时,带来截然不同的用户体验。
提示
由于 v-model 在所有组件上原生支持,visible.sync
已被弃用,请使用 v-model="visibilityBinding"
来控制当前抽屉的可见性。
基础用法
从不同方向呼出一个临时的抽屉。
与 Dialog
组件一样,Drawer
也需要一个 boolean
类型的 model-value
用于控制抽屉的显示/隐藏。Drawer
分为三个部分:title
、body
、footer
,title
可以通过具名 slot 传入,也可以通过 title
属性传入,默认为空。Drawer
的主要区域是 body
,一个默认的 slot。默认情况下,Drawer
从右往左打开,占据浏览器窗口 30% 的空间,当然,这个默认行为是可以通过 direction
和 size
属性覆盖的。这个示例也展示了如何使用 before-close
API,更多细节请查看 Attributes 章节。
不带标题
当您不再需要标题时,可以将其从抽屉中删除。
将 withHeader
属性设置为 false,您可以从抽屉中移除标题,这样您的抽屉在屏幕上可以有更多的空间。如果您想要保证可访问性,请确保设置了 title
属性。
自定义内容
和 Dialog
一样,Drawer
也可以用来显示多种多样的交互内容。
自定义页眉
header
插槽可用于自定义显示标题的区域。为了保持可访问性,除了使用此插槽外,还请使用 title
属性,或使用 titleId
插槽属性来指定哪个元素应被读作抽屉标题。
可拖拽的抽屉 2.11.0
尝试拖动边缘部分。
设置 resizable
为 true
来实现调整大小的功能。
嵌套抽屉
您也可以像 Dialog
一样拥有多层 Drawer
。
如果您需要在不同层级显示多个抽屉,您必须将 append-to-body
属性设置为 true
提示
抽屉内部的内容应该是懒渲染的,这意味着抽屉内部的内容不会影响初始渲染性能,因此任何 DOM 操作都应该通过 ref
或在 open
事件触发后执行。
提示
Drawer 提供了一个名为 destroyOnClose
的 API,这是一个标志变量,表示抽屉关闭后是否销毁其中的子内容。当您需要每次抽屉打开时都调用 mounted
生命周期时,可以使用此 API。
API
属性
名称 | 描述 | 类型 | 默认值 |
---|---|---|---|
model-value / v-model | 是否显示 Drawer | boolean | false |
append-to-body | 控制抽屉是否应插入到 DocumentBody 元素中,嵌套的抽屉必须将此参数设为 true | boolean | false |
append-to 2.8.0 | 抽屉附加到的元素。将覆盖 append-to-body | CSSSelector / HTMLElement | body |
lock-scroll | 当 Drawer 显示时是否禁用 body 的滚动 | boolean | true |
before-close | 如果设置,关闭过程将被暂停 | Function | — |
close-on-click-modal | 抽屉是否可以通过点击遮罩来关闭 | boolean | true |
close-on-press-escape | 表示抽屉是否可以通过按 ESC 关闭 | boolean | true |
open-delay | 打开前的延迟时间(毫秒) | number | 0 |
close-delay | 关闭前的延迟时间(毫秒) | number | 0 |
destroy-on-close | 表示在抽屉关闭后是否销毁子元素 | boolean | false |
modal | 是否应显示阴影层 | boolean | true |
direction | 抽屉的打开方向 | 枚举 | rtl |
resizable 2.11.0 | 为抽屉启用可调整大小的功能 | boolean | false |
show-close | 是否应在抽屉右上角显示关闭按钮 | boolean | true |
size | 抽屉的大小,如果抽屉是水平模式,它影响宽度属性,否则影响高度属性,当 size 是 number 类型时,它以像素为单位描述大小;当 size 是 string 类型时,应该使用 x% 表示法,否则它将被解释为像素单位 | number / string | 30% |
title | 抽屉的标题,也可以通过具名插槽设置,详细描述可以在插槽表单中找到 | string | — |
with-header | 控制头部区域是否存在的标志,默认为 true,当 withHeader 设置为 false 时,title 属性 和 title 插槽 都将不工作 | boolean | true |
modal-class | 阴影层的额外类名 | string | — |
header-class 2.9.3 | 头部包装器的自定义类名 | string | — |
body-class 2.9.3 | 主体包装器的自定义类名 | string | — |
footer-class 2.9.3 | 底部包装器的自定义类名 | string | — |
z-index | 设置 z-index | number | — |
header-aria-level a11y | 头部的 aria-level 属性 | string | 2 |
custom-class 已弃用 | 抽屉的额外类名 | string | — |
警告
custom-class
已被弃用,并将在 2.3.0 版本中移除,请使用 class
。
事件
名称 | 描述 | 类型 |
---|---|---|
打开 | 在抽屉打开动画开始前触发 | Function |
opened | 在抽屉打开动画结束后触发 | Function |
关闭 | 在抽屉关闭动画开始前触发 | Function |
closed | 在抽屉关闭动画结束后触发 | Function |
open-auto-focus | 在抽屉打开且内容聚焦后触发 | Function |
close-auto-focus | 在抽屉关闭且内容聚焦后触发 | Function |
插槽
名称 | 描述 |
---|---|
default | 抽屉的内容 |
header | 抽屉头部区域;替换此插槽将移除标题,但不会移除关闭按钮。 |
footer | 抽屉底部区域 |
title 已弃用 | 与 header 插槽作用相同。请改用 header 插槽。 |
暴露
名称 | 描述 |
---|---|
handleClose | 为了关闭抽屉,此方法将调用 before-close 。 |