Dialog 模态窗

Scan me!

交互式模态窗口

引入

  1. import { Dialog } from 'mand-mobile'
  2. Dialog.alert({ content: '' })
  3. this.$dialog.alert({ content: '' }) // 全量引入

代码演示

基本

Dialog 模态窗 - 图2

  1. <template>
  2. <div class="md-example-child md-example-child-dialog md-example-child-dialog-0">
  3. <md-button @click="basicDialog.open = true">基本</md-button>
  4. <md-button @click="iconDialog.open = true">带图标</md-button>
  5. <md-button @click="warnDialog.open = true">警示操作</md-button>
  6. <md-button @click="asyncDialog.open = true">异步操作</md-button>
  7. <md-button @click="actDialog.open = true">多操作</md-button>
  8. <md-button @click="slotDialog.open = true">插槽</md-button>
  9. <md-dialog
  10. title="窗口标题"
  11. :closable="true"
  12. v-model="basicDialog.open"
  13. :btns="basicDialog.btns"
  14. >
  15. 人生的刺,就在这里,留恋着不肯快走的,偏是你所不留恋的东西。
  16. </md-dialog>
  17. <md-dialog
  18. icon="location"
  19. :closable="true"
  20. v-model="iconDialog.open"
  21. :btns="iconDialog.btns"
  22. >
  23. 围在城里的人想逃出来,城外的人想冲进去,对婚姻也罢,职业也罢,人生的愿望大都如此。
  24. </md-dialog>
  25. <md-dialog
  26. title="警示操作"
  27. :closable="false"
  28. v-model="warnDialog.open"
  29. :btns="warnDialog.btns"
  30. >
  31. 或是因为习惯了孤独,我们渴望被爱;又或是害怕爱而不得,我们最后仍然选择孤独。
  32. </md-dialog>
  33. <md-dialog
  34. :closable="false"
  35. v-model="asyncDialog.open"
  36. :btns="asyncDialog.btns"
  37. >
  38. 每个人都有属于自己的一片森林,也许我们 从来不曾去过,但它一直在那里,总会在那里。迷失的人迷失了,相逢的人会再相逢。
  39. </md-dialog>
  40. <md-dialog
  41. title="窗口标题"
  42. :closable="false"
  43. layout="column"
  44. v-model="actDialog.open"
  45. :btns="actDialog.btns"
  46. >
  47. 据说每个人需要一面镜子,可以常常自照,知道自己是个什么东西。不过,能自知的人根本不用照镜子;不自知的东西,照了镜子也没有用。
  48. </md-dialog>
  49. <md-dialog
  50. title="家"
  51. :closable="false"
  52. v-model="slotDialog.open"
  53. :btns="slotDialog.btns"
  54. >
  55. <div class="dialog-banner" slot="header">
  56. <img src="http://img-hxy021.didistatic.com/static/strategymis/insurancePlatform_spu/uploads/27fb7f097ca218d743f816836bc7ea4a" alt="">
  57. </div>
  58. 虽然其中有一些争吵、不愉快、曲折,但重要的是一家人整整齐齐。
  59. </md-dialog>
  60. </div>
  61. </template>
  62. <script>
  63. import {Dialog, Button, Toast} from 'mand-mobile'
  64. export default {
  65. name: 'dialog-demo',
  66. components: {
  67. [Dialog.name]: Dialog,
  68. [Button.name]: Button,
  69. },
  70. data() {
  71. return {
  72. basicDialog: {
  73. open: false,
  74. btns: [
  75. {
  76. text: '取消',
  77. handler: this.onBasicCancel,
  78. },
  79. {
  80. text: '确认操作',
  81. handler: this.onBasicConfirm,
  82. },
  83. ],
  84. },
  85. iconDialog: {
  86. open: false,
  87. btns: [
  88. {
  89. text: '确认操作',
  90. handler: this.onIconConfirm,
  91. },
  92. ],
  93. },
  94. warnDialog: {
  95. open: false,
  96. btns: [
  97. {
  98. text: '取消',
  99. },
  100. {
  101. text: '警示操作',
  102. warning: true,
  103. handler: this.onWarnConfirm,
  104. },
  105. ],
  106. },
  107. asyncDialog: {
  108. open: false,
  109. btns: [
  110. {
  111. text: '开始搜索',
  112. icon: 'search',
  113. handler: this.onAsyncConfirm,
  114. },
  115. ],
  116. },
  117. actDialog: {
  118. open: false,
  119. btns: [
  120. {
  121. text: '操作一',
  122. type: 'danger',
  123. handler: this.onActConfirm,
  124. },
  125. {
  126. text: '操作二',
  127. handler: this.onActConfirm,
  128. disabled: true,
  129. },
  130. {
  131. text: '操作三',
  132. handler: this.onActConfirm,
  133. },
  134. ],
  135. },
  136. slotDialog: {
  137. open: false,
  138. btns: [
  139. {
  140. text: '好的',
  141. },
  142. ],
  143. },
  144. }
  145. },
  146. methods: {
  147. onBasicConfirm() {
  148. Toast({
  149. content: '你点击了确认',
  150. })
  151. this.basicDialog.open = false
  152. },
  153. onBasicCancel() {
  154. Toast({
  155. content: '你点击了取消',
  156. })
  157. this.basicDialog.open = false
  158. },
  159. onIconConfirm() {
  160. Toast({
  161. content: '你点击了确认',
  162. })
  163. this.iconDialog.open = false
  164. },
  165. onActConfirm() {
  166. this.actDialog.open = false
  167. },
  168. onAsyncConfirm(btn) {
  169. this.$set(btn, 'loading', true)
  170. this.$set(btn, 'text', '搜索中')
  171. setTimeout(() => {
  172. this.asyncDialog.open = false
  173. this.$set(btn, 'loading', false)
  174. this.$set(btn, 'text', '开始搜索')
  175. Toast({
  176. content: '搜索成功',
  177. })
  178. }, 1500)
  179. },
  180. },
  181. }
  182. </script>
  183. <style lang="stylus" scoped>
  184. .dialog-banner
  185. img
  186. display block
  187. width 100%
  188. </style>
  189.  

单例模式

Dialog 模态窗 - 图3

        <template>
  <div class="md-example-child md-example-child-dialog md-example-child-dialog-1">
    <md-button @click="alert">警告弹窗</md-button>
    <md-button @click="confirm">确认弹窗</md-button>
    <md-button @click="succeedConfirm">成功弹窗</md-button>
    <md-button @click="failedConfirm">失败弹窗</md-button>
  </div>
</template>

<script>
import {Dialog, Button} from 'mand-mobile'

export default {
  name: 'dialog-demo',
  components: {
    [Dialog.name]: Dialog,
    [Button.name]: Button,
  },
  methods: {
    alert() {
      Dialog.alert({
        title: '警告',
        content: '您正在进行非法操作',
        cancelText: '取消',
        confirmText: '确定',
        onConfirm: () => console.log('[Dialog.alert] confirm clicked'),
      })
    },
    confirm() {
      Dialog.confirm({
        title: '确认',
        content: '请确认是否进行操作',
        confirmText: '确定',
        onConfirm: () => console.log('[Dialog.confirm] confirm clicked'),
      })
    },
    succeedConfirm() {
      Dialog.succeed({
        title: '成功',
        content: '恭喜您成功完成操作',
        confirmText: '确定',
        onConfirm: () => console.log('[Dialog.succeed] confirm clicked'),
      })
    },
    failedConfirm() {
      Dialog.failed({
        title: '失败',
        content: '操作失败,请稍后重试',
        confirmText: '确定',
        onConfirm: () => console.log('[Dialog.failed] confirm clicked'),
      })
    },
  },
}

</script>

      

API

Dialog Props

属性说明类型默认值备注
v-model双向绑定是否显示窗口Booleanfalse-
title窗口标题String--
iconIcon组件图标名称String--
icon-svgsvg图标Booleanfalse如需自定义图标, 请查看Icon组件
closable是否显示关闭按钮Booleantrue-
layout底部按钮组布局方式, row, columnStringrow-
btns底部操作按钮组Array<DialogBtnOptions>[]-
append-to组件的挂载节点HTMLElementdocument.body-
has-mask是否有蒙层Booleantrue-
mask-closable点击蒙层是否可关闭弹出层Booleanfalse-
transition弹出层过度动画String可选值参考Transition

DialogBtnOptions Props

属性说明类型默认值
text按钮文案String-
handler点击回调Function(btn: DialogBtnOptions)-
warning警示按钮Booleanfalse
disabled 2.4.0+禁用按钮Booleanfalse
loading 2.4.0+加载中按钮Booleanfalse
icon按钮图标String-
iconSvg按钮svg图标Booleanfalse

Dialog Slots

default

组件子元素会被当做默认插槽内容使用,适合于不需要标题的自定义窗口内容的场景

header

顶部插槽,一般用于放置图片等 2.4.0+

Dialog Instance Methods

close()

隐藏弹窗

Dialog Instance Events

@show()

模态窗口显示后触发的事件

@hide()

模态窗口隐藏后触发的事件

Dialog Static Methods

Dialog.confirm(props)

静态方法创建确认模态窗口, 返回Dialog实例

属性说明类型默认值
icon图标String-
title窗口标题String-
content正文内容String-
cancelText底部取消按钮文字String取消
confirmText底部确认按钮文字String确认
cancelWarning点击取消按钮为警示操作Booleanfalse
confirmWarning点击确认按钮为警示操作Booleanfalse
onConfirm点击确认按钮回调函数Function-
onCancel点击取消按钮回调函数Function-
Dialog.alert(props)

静态方法创建警告模态窗口, 返回Dialog实例

属性说明类型默认值
icon图标String-
title窗口标题String-
content正文内容String-
confirmText底部确认按钮文字String确认
warning点击确认按钮为警示操作Booleanfalse
onConfirm点击确认按钮回调函数Function-
Dialog.succeed(props)

静态方法创建成功确认模态窗口, 返回Dialog实例

属性说明类型默认值
title窗口标题String-
content正文内容String-
confirmText底部确认按钮文字String确认
onConfirm点击确认按钮回调函数Function-
onCancel点击取消按钮回调函数Function-
Dialog.failed(props)

静态方法创建失败确认模态窗口, 返回Dialog实例

属性说明类型默认值
title窗口标题String-
content正文内容String-
confirmText底部确认按钮文字String确认
onConfirm点击确认按钮回调函数Function-
onCancel点击取消按钮回调函数Function-
Dialog.closeAll()

静态方法关闭所有动态创建的全局Dialog