Modal 对话框
代码演示
基础用法
before-close-modal,before-close-button,before-close分别在点击遮罩层,关闭图标和全部时起效
查看代码 < />
<template>
  <w-button @click="visible = !visible">点击打开Modal</w-button>
  <w-modal  :visible.sync="visible"
            :before-close-modal="handleCloseModal"
    :title="title"
    width="30%">
    <span>这是一段信息</span>
    <span slot="footer" class="dialog-footer">
      <w-button @click="visible = false">取 消</w-button>
      <w-button type="primary" @click="visible = false">确 定</w-button>
    </span>
  </w-modal>
</template>
<script>
  export default {
    data() {
      return {
        visible: false,
      }
    },
    methods: {
      handleCloseModal(done) {
        this.$Confirm('确认关闭Modal?')
          .then(_ => {
            done();
          })
          .catch(_ => {});
      }
    }
  }
</script>彩色样式
需要使用 color 属性可以为Modal添加色彩。
查看代码 < />
<template>
  <w-button @click="visible = !visible">彩色样式的Modal</w-button>
  <w-modal  :visible.sync="visible"
    color
    :title="title"
    width="30%">
    <span>这是一段信息</span>
    <span slot="footer" class="dialog-footer">
    <w-button @click="visible = false">取 消</w-button>
    <w-button type="primary" @click="visible = false">确 定</w-button>
    </span>
  </w-modal>
</template>异步关闭
点击确定,查看异步关闭效果。
查看代码 < />
<template>
  <w-button @click="visible = !visible">点击打开 Modal</w-button>
  <w-modal  :visible.sync="visible"
    :title="title"
    width="30%">
    <span>这是一段信息</span>
    <span slot="footer" class="dialog-footer">
      <w-button :icon="loadingIcon" @click="showModal()">取 消</w-button>
      <w-button type="primary" :icon="loadingIcon" @click="showModal()">确 定</w-button>
    </span>
  </w-modal>
</template>
<script>
export default {
  data () {
    return {
      visible: false,
      isIcon: '',
      title:'异步关闭',
      showClose: false
     }
    },
  computed:{
    loadingIcon:function(){
      return this.isIcon ? 'w-icon-loading' : ''
    }
  },
  methods: {
    showModal (val) {
      this.isIcon = true
      let _this= this
      setTimeout(function()  {
        _this.visible = false
        _this.isIcon = false
      }, 1500)
    }
  }
}
</script>自定义内容
Modal 组件的内容可以是任意的,甚至可以是表格或表单,下面是应用了 tree 组件的样例。
查看代码 < />
<template>
  <w-button @click="visible = !visible">打开嵌套树的Modal</w-button>
  <w-modal :visible.sync="visible"
    :title="title"
    width="30%">
    <w-tree :data="data" :props="defaultProps"></w-tree>
    <span slot="footer" class="dialog-footer">
      <w-button @click="visible = false">取 消</w-button>
      <w-button type="primary" @click="visible = false">确 定</w-button>
    </span>
  </w-modal>
</template>
<script>
  export default {
    data () {
      return {
         data: [
          {
            label: '一级 1',
            children: [{
              label: '二级 1-1',
              children: [{
                label: '三级 1-1-1'
              }]
            }]
          }, {
            label: '一级 2',
            children: [{
              label: '二级 2-1',
              children: [{
                label: '三级 2-1-1'
              }]
            }, {
              label: '二级 2-2',
              children: [{
                label: '三级 2-2-1'
              }]
            }]
          }, {
            label: '一级 3',
            children: [{
              label: '二级 3-1',
              children: [{
                label: '三级 3-1-1'
              }]
            }, {
              label: '二级 3-2',
              children: [{
                label: '三级 3-2-1'
              }]
            }]
          }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      }
    }
    }
</script>嵌套Modal
正常情况下,我们不建议使用嵌套的 Modal,如果需要在页面上同时显示多个 Modal,可以将它们平级放置。对于确实需要嵌套 Modal 的场景,我们提供了append-to-body属性。将内层 Modal 的该属性设置为 true,它就会插入至 body 元素上,从而保证内外层 Modal 和遮罩层级关系的正确。
查看代码 < />
<template>
  <section class="pagination-demo">
      description="正常情况下,我们不建议使用嵌套的 Modal,如果需要在页面上同时显示多个 Modal,可以将它们平级放置。对于确实需要嵌套 Modal 的场景,我们提供了append-to-body属性。将内层 Modal 的该属性设置为 true,它就会插入至 body 元素上,从而保证内外层 Modal 和遮罩层级关系的正确。">
      <w-button type='text'
                @click="outerVisible = true">点击打开外层 Modal</w-button>
      <w-modal  :visible.sync="outerVisible"
                width="60%"
                color
                title="外层 Modal"
                >
        <w-modal
          width="30%"
          title="内层 Modal"
          :visible.sync="innerVisible"
          append-to-body>
        </w-modal>
        <span slot="footer" class="dialog-footer">
            <w-button @click="outerVisible = false">取 消</w-button>
            <w-button style="margin-left: 15px;" type="primary" @click="innerVisible = true">点击打开内层 Modal</w-button>
          </span>
      </w-modal>
  </section>
</template>
居中布局
标题和底部可水平居中。
查看代码 < />
<template>
  <w-button @click="visible = !visible">点击打开Modal</w-button>
  <w-modal  :visible.sync="visible"
    center
    :title="title"
    width="30%">
    <span>这是一段信息</span>
    <span slot="footer" class="dialog-footer">
      <w-button @click="visible = false">取 消</w-button>
      <w-button type="primary" @click="visible = false">确 定</w-button>
    </span>
  </w-modal>
</template>API
Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | Version | 
|---|---|---|---|---|---|
| append-to-body | Modal 自身是否插入至 body 元素上。嵌套的 Modal 必须指定该属性并赋值为 true | Boolean | — | false | |
| before-close | 关闭前的回调,会暂停 Modal 的关闭 | Function(done),done 用于关闭 Modal | — | — | |
| before-close-modal | 点击遮罩层关闭前的回调,会暂停 Modal 的关闭,使用before-close,此方法失效 | Function(done),done 用于关闭 Modal | — | — | |
| before-close-button | 点击关闭icon关闭前的回调,会暂停 Modal 的关闭,使用before-close,此方法失效 | Function(done),done 用于关闭 Modal | — | — | |
| center | 是否对头部和底部采用居中布局 | Boolean | — | false | |
| custom-class | Modal 的自定义类名 | String | — | — | |
| close-on-click-modal | 是否可以通过点击遮罩 关闭 Modal | Boolean | — | true | |
| close-on-press-escape | 是否可以通过按下 ESC 关闭 Modal | Boolean | — | true | |
| fullscreen | 是否为全屏 Modal | Boolean | — | false | |
| lock-scroll | 是否在 Modal 出现时将 body 滚动锁定 | Boolean | — | true | |
| modal | 是否显示遮罩, 默认显示 | Boolean | — | true | |
| modal-append-to-body | 遮罩层是否插入至 body 元素上,若为 false,则遮罩层会插入至 Modal 的父元素上 | Boolean | — | true | |
| title | Modal 的标题,也可通过具名 slot (见下表)传入 | String | — | — | |
| top | Modal CSS 中的 margin-top 值 | String | — | 15vh | |
| show-close | 是否显示关闭按钮 | Boolean | — | true | |
| visible | 是否显示 Modal,支持 .sync 修饰符 | Boolean | — | true | |
| width | Modal 的宽度 | String | — | 50% | 
Slot
| 名称 | 说明 | Version | 
|---|---|---|
| — | Modal 的内容 | |
| footer | Modal 按钮操作区的内容 | |
| title | Modal 标题区的内容 | 
Events
| 事件名称 | 说明 | 回调参数 | Version | 
|---|---|---|---|
| close | Modal 关闭的回调 | - | |
| closed | Modal 关闭动画结束时的回调 | - | |
| open | Modal 打开的回调 | - | |
| opened | Modal 打开动画结束时的回调 | - | 
贡献者
| 类型 | 参与者 | 
|---|---|
| 设计者 | UED视觉组 | 
| 维护者 | UED前端组 |