TUI

0.3.7
Modal 模态框组件
Modal 用于在当前页面弹出一个模态对话框,常用于展示信息、操作确认或承载交互表单。
基础用法
最简单的用法,通过 v-model 控制模态框的显示和隐藏。
示例代码
vue
<template>
  <TsButton @click="openBaseModal">打开模态框</TsButton>
  <TsModal v-model="baseModalVisible"></TsModal>
</template>
<script setup lang="ts">
  const baseModalVisible = ref(false);
  const openBaseModal = () => (baseModalVisible.value = true);
</script>
简单使用标题和内容
通过 titlecontent 属性快速定义模态框内容。
示例代码
vue
<template>
  <TsModal v-model="simpleModalVisible" title="This is a title" content="this is a modal"></TsModal>
</template>
<script setup lang="ts">
  const simpleModalVisible = ref(false);
  const openSimpleModal = () => (simpleModalVisible.value = true);
</script>
带标题和内容插槽
使用 titlecontent 插槽可自定义展示样式和结构。
示例代码
vue
<template>
  <TsButton @click="openSlotModal">打开模态框</TsButton>
   <TsModal v-model="slotModalVisible">
    <template #title>
      <div class="modal-title">标题</div>
    </template>
    <template #content>
      <div class="modal-content">这是模态框的内容区域,可以放置文本或表单。</div>
    </template>
  </TsModal>
</template>
<script setup lang="ts">
  const slotModalVisible = ref(false);
  const openSlotModal = () => (slotModalVisible.value = true);
</script>
自定义关闭按钮
使用 close 插槽自定义关闭按钮,替代默认的右上角关闭图标。
示例代码
vue
<template>
  <TsButton @click="openCloseSlotModal">打开模态框</TsButton>
  <TsModal v-model="closeSlotModalVisible" :showClose="true">
    <template #title>
      <div class="modal-title">带自定义关闭按钮</div>
    </template>
    <template #close>
      <TsButton type="danger" size="small" @click="closeSlotModalVisible = false">X</TsButton>
    </template>
    <template #content>
      <div class="modal-content">你可以通过自定义 close 插槽替换默认关闭按钮。</div>
    </template>
  </TsModal>
</template>
<script setup lang="ts">
  const closeSlotModalVisible = ref(false);
  const openCloseSlotModal = () => (closeSlotModalVisible.value = true);
</script>
宽度高度 & 固定定位
通过 widthheight 设置模态框尺寸,设置 fixed 属性可固定在页面中央。
示例代码
vue
<template>
  <TsButton @click="openFixedModal">打开模态框</TsButton>
  <TsModal v-model="fixedModalVisible" width="600px" height="300px" :fixed="true">
    <template #title>
      <div class="modal-title">大号模态框</div>
    </template>
    <template #content>
      <div class="modal-content">这是一个宽 600px,高 300px,并且固定在页面上的模态框。</div>
    </template>
  </TsModal>
</template>
<script setup lang="ts">
  const fixedModalVisible = ref(false);
  const openFixedModal = () => (fixedModalVisible.value = true);
</script>
点击遮罩层不关闭
通过 closeOnClickMask 属性控制是否允许点击遮罩层关闭模态框。
示例代码
vue
<template>
  <TsButton @click="openForceModal">打开模态框</TsButton>
  <TsModal v-model="forceModalVisible" :closeOnClickMask="false" :showClose="false">
    <template #title>
      <div class="modal-title">强制交互</div>
    </template>
    <template #content>
      <div class="modal-content">你必须点击底部按钮、或者关闭图标才能关闭,而不是点击遮罩层。</div>
    </template>
    <template #footer>
      <TsButton @click="forceModalVisible = false">我觉得应该点取消</TsButton>
      <TsButton type="primary" @click="forceModalVisible = false">我知道了</TsButton>
    </template>
  </TsModal>
</template>
<script setup lang="ts">
  const forceModalVisible = ref(false);
  const openForceModal = () => (forceModalVisible.value = true);
</script>
属性 Props
属性名
说明
类型
可选值
默认值
版本说明
modelValue
是否显示模态框
Boolean
false
width
模态框宽度
String
520px
height
模态框高度
String
180px
closeOnClickMask
点击遮罩层是否关闭
Boolean
true
showClose
是否显示关闭按钮
Boolean
true
事件 Events
事件名
说明
类型
close
模态框关闭时触发
-
插槽 Slots
插槽名
说明
default
自定义 modalMain 内容
title
自定义标题内容
content
自定义内容区域
footer
自定义底部按钮区域
close
自定义关闭按钮