Skip to content

Dialog 对话框

在保留当前页面状态的情况下,告知用户并承载相关操作。

基础用法

Dialog 默认从中间弹出居中显示。

vue
<template>
  <ImDialog v-model="open">
    <ImDialogHeader>标题</ImDialogHeader>
    <ImDialogBody>让我们一起摇摆!</ImDialogBody>
    <ImDialogFooter>
      <ImButton @click="open = false">关闭</ImButton>
      <ImButton @click="open = false" color="primary">确认</ImButton>
    </ImDialogFooter>
  </ImDialog>
  <ImButton @click="open = true">打开一下</ImButton>
</template>

全屏对话框

使用 fullscreen 属性可以让对话框的内容区全屏显示。

vue
<template>
  <ImDialog v-model="fullShow" fullscreen>
    <ImDialogHeader divider
      >标题
      <template #action>
        <ImButton @click="fullShow = false" shape="circle" variant="text">
          <ImIcon name="close" size="20"></ImIcon>
        </ImButton>
      </template>
    </ImDialogHeader>
    <ImDialogBody>
      <div v-for="i in 8">
        <ImCheckbox size="48">
          支持选择 Google 帮助应用确定位置。这意味着将匿名位置数据发送给 Google
        </ImCheckbox>
      </div>
    </ImDialogBody>
  </ImDialog>
  <ImButton @click="fullShow = true" color="primary" variant="outlined"
    >打开全屏</ImButton
  >
</template>

触发器打开

设置 getTarget 属性,可以将 Dialog 的打开与关闭绑定到某个元素上。

vue
<template>
  <ImDialog v-model="trigger">
    <ImDialogHeader>标题</ImDialogHeader>
    <ImDialogBody>一段话</ImDialogBody>
    <ImDialogFooter>
      <ImButton @click="trigger = false">关闭</ImButton>
    </ImDialogFooter>
  </ImDialog>
  <ImButton @click="trigger = true" id="Demo_Button">试试吧</ImButton>
</template>

嵌套使用

vue
<template>
  <ImDialog v-model="parent">
    <ImDialogHeader>父标题</ImDialogHeader>
    <ImDialogBody
      >这里是内容区域
      <ImButton @click="child = true">打开子级对话框</ImButton>
    </ImDialogBody>

    <ImDialog v-model="child" parent>
      <ImDialogHeader>子标题</ImDialogHeader>
      <ImDialogBody>这里是内容区域</ImDialogBody>
    </ImDialog>
  </ImDialog>
  <ImButton @click="parent = true">打开父级对话框</ImButton>
</template>

支持拖拽

设置 draggable 属性,可以让对话框支持拖拽。支持 PC 端 移动端。

vue
<template>
  <ImDialog v-model="drag" draggable>
    <ImDialogHeader>标题</ImDialogHeader>
    <ImDialogBody>你可以拖拽头部</ImDialogBody>
    <ImDialogFooter>
      <ImButton @click="drag = false" color="primary">Confirm</ImButton>
    </ImDialogFooter>
  </ImDialog>
  <ImButton @click="drag = true" color="primary" variant="outlined"
    >打开对话</ImButton
  >
</template>

自定义头部关闭按钮

vue
<template>
  <ImDialog v-model="headerClose">
    <ImDialogHeader
      >标题
      <template #action>
        <ImButton @click="headerClose = false" shape="circle" variant="text">
          <ImIcon name="close" size="20"></ImIcon>
        </ImButton>
      </template>
    </ImDialogHeader>
    <ImDialogBody>Let Google help apps determine location. </ImDialogBody>
    <ImDialogFooter>
      <ImButton @click="headerClose = false">关闭</ImButton>
    </ImDialogFooter>
  </ImDialog>
  <ImButton @click="headerClose = true" color="primary" variant="outlined"
    >打开对话</ImButton
  >
</template>

分割线

设置分割线属性,可以让头部显示分割线。

vue
<template>
  <ImDialog v-model="dividerShow">
    <ImDialogHeader divider>标题 </ImDialogHeader>
    <ImDialogBody>你就说好不好</ImDialogBody>
    <ImDialogFooter divider>
      <ImButton @click="dividerShow = false">关闭</ImButton>
    </ImDialogFooter>
  </ImDialog>
  <ImButton @click="dividerShow = true" color="primary" variant="outlined"
    >打开对话</ImButton
  >
</template>

顶部距离

设置 top 属性,可以设置对话框顶部距离。

vue
<template>
  <ImDialog v-model="top" top="100px">
    <ImDialogHeader>标题</ImDialogHeader>
    <ImDialogBody>可以设置对话框顶部距离</ImDialogBody>
    <ImDialogFooter>
      <ImButton @click="top = false">关闭</ImButton>
    </ImDialogFooter>
  </ImDialog>
  <ImButton @click="top = true" color="primary" variant="outlined"
    >打开对话</ImButton
  >
</template>

API

Dialog 组件提供了以下属性:

属性类型描述默认值其他值
modelValueBoolean是否显示对话框false-
closeOnClickMaskBoolean是否可以通过点击遮罩关闭对话框true-
widthString对话框的宽度--
heightString对话框的高度--
fullscreenBoolean是否全屏显示对话框false-
closeOnEscapeBoolean是否可以通过按下 Esc 键关闭对话框true-
maskBoolean是否显示背景遮罩true-
zIndexNumber对话框的 z-index 值--
topString | Number对话框距离顶部的距离--
getTargetFunction返回对话框挂载的目标元素--
draggableBoolean是否可以拖动对话框false-

基于 MIT 协议发布