弹框
在浮层中显示一个对话框。本组件基于 View Design Modal 封装。
基础用法
需要设置 model-value / v-model 属性, 它接受 Boolean,当为 true 时显示 Modal。Modal 分为两个部分:body 和 footer, footer 需要具名为 footer 的 slot。 title 属性用于定义标题,它是可选的,默认值为空。
<template>
<Button @click="show">显示弹框</Button>
<ui-modal title="标题" v-model="visible" @onCancel="onCancel" @query="query"> 内容 </ui-modal>
</template>
<script setup>
import { ref } from 'vue';
const visible = ref(false);
const show = () => {
visible.value = true;
};
const onCancel = () => {
console.log(`关闭弹框`);
};
const query = () => {
console.log(`确认`);
};
</script>
自定义头部,页脚
header 可用于自定义显示标题的区域。footer 可用于自定义显示页脚区域。
<template>
<Button @click="show">显示弹框</Button>
<ui-modal v-model="visible" @onCancel="onCancel" @query="query">
<template #header> 自定义标题 </template>
内容
<template #footer> 页脚 </template>
</ui-modal>
</template>
<script setup>
import { ref } from 'vue';
const visible = ref(false);
const show = () => {
visible.value = true;
};
const onCancel = () => {
console.log(`关闭弹框`);
};
const query = () => {
console.log(`确认`);
};
</script>
可拖拽
设置 draggable 属性为 true 以做到拖拽
<template>
<Button @click="show">显示弹框</Button>
<ui-modal title="可拖拽" draggable v-model="visible" @onCancel="onCancel" @query="query">
内容
</ui-modal>
</template>
<script setup>
import { ref } from 'vue';
const visible = ref(false);
const show = () => {
visible.value = true;
};
const onCancel = () => {
console.log(`关闭弹框`);
};
const query = () => {
console.log(`确认`);
};
</script>
属性
| 属性名 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| model-value / v-model | 是否显示 | boolean | —— | —— |
| title | 弹框的标题 也可以通过具名 slot(见下表)传入 | string | —— | —— |
| footer-hide | 隐藏底部 | booblean | —— | false |
| loading | 点击确定按钮时,确定按钮是否显示 loading 状态 | boolean | —— | false |
| class-custom | 自定义 class | string | —— | —— |
| 透传属性 | 见 View Design Modal | —— | —— | —— |
事件
| 事件名 | 说明 | 参数 |
|---|---|---|
| onCancel | 点击取消的回调 | —— |
| query | 点击确定的回调 | —— |
| 透传事件 | 见 View Design Modal | —— |
插槽
| 名称 | 说明 |
|---|---|
| —— | 弹框的内容 |
| header | 弹框标题的内容; 会替换标题部分,但不会移除关闭按钮 |
| footer | 自定义页脚内容 |