# Dialog弹窗组件

# 使用教程

点击查看教程

# 使用文档

# 导入

main.js中:

import { Dialog } from 'cpm-ui'
Vue.use(Dialog)
1
2

# 调用

挂载在vue.prototype上,vue实例中,直接使用 this.$dialog({options}) 使用。

# 属性props(propsData)

参数 说明 类型 可选值 默认值
cliperStyleObj 蒙层样式 Object {}
dialogWrapStyle 弹窗样式 Object {}
contentWrapStyle 主内容样式 Object {}
animateName 弹窗出现和消失动画 String ''、zoom-inbounce-in-upbounce-in-down ''表示不开启动画
showTitle 是否显示标题 Boolean truefalse false
titleText 标题文本 String '' ''
message 主内容 String '' ''
messageAlign 主内容对齐方式 String leftcenterright center
showCloseBtn 是否显示关闭按钮 Boolean truefalse false
closeBtnPostion 关闭按钮位置 String bottomrightTop rightTop
showCancelBtn 是否显示取消按钮 Boolean truefalse true
cancelBtnText 取消按钮文本 String '' '取消'
cancelBtnStyle 取消按钮样式 Object {}
showConfirmBtn 是否显示确定按钮 Boolean truefalse true
confirmBtnText 确定按钮文本 String '' '确定'
confirmBtnStyle 确定按钮样式 Object {}
cContentData 插入组件 Object {}

插入组件时: propsDatacContentData 存储组件数据,components 导入组件,如:

this.$dialog({
  propsData: {
    animateName: 'zoom-in',
    cContentData: {
      title: '你喜欢的歌手的身价榜',
      list: [
        { name: '汪苏泷', price: '10,000,000' },
        { name: '薛之谦', price: '20,000,000' },
        { name: '罗志祥', price: '30,000,000' },
        { name: '王力宏', price: '40,000,000' },
        { name: '林俊杰', price: '50,000,000' },
        { name: '陈奕迅', price: '60,000,000' },
        { name: '周杰伦', price: '70,000,000' },
        { name: '张国荣', price: '80,000,000' },
        { name: '中国星', price: '90,000,000' }
      ],
      content: '歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手歌手'
    }
  },
  components: {
    // 传入方式1:
    // cContent: { // 子组件
    //   props: {
    //     cContentData: {
    //       type: Object,
    //       default: () => { }
    //     }
    //   },
    //   template: `
    //     <div style="padding:1.6rem;">
    //       <h2 style="margin-bottom:1rem">{{cContentData.title}}</h2>
    //       <ul style="font-size:0.8rem;text-align:left;height:8rem;overflow-y:scroll" class="scrollable">
    //         <li style="list-style: disc;" v-for="(item, index) in cContentData.list" :key="index">{{item.name}}的身价是:{{item.price}}</li>
    //       </ul>
    //       <div style="font-size:0.8rem;white-space: nowrap;overflow-x:scroll" class="scrollable">{{cContentData.content}}</div>
    //     </div>
    //   `
    // }

    // 传入方式2
    cContent: resolve => resolve(require('./components/dialogChild.vue'))
  },
  methods: {
    onCancel () {
      this.remove()
    },
    onConfirm () {
      this.remove()
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

# 初始化created或mounted

我们可以在mounted中设置 this.$on 来捕获组件内的派发的事件,即组件自身接受自己派发的事件。

参数 说明
onClickCliper 点击蒙层
onClose 点击关闭按钮
onCancel 点击取消按钮
onConfirm 点击确定按钮

如:

this.$dialog({
  propsData: {
    showTitle: true,
    showCloseBtn: true,
    titleText: '请完成实名认证',
    message: '实名认证后您可以得到0~10万的人民币奖励,名额有限,先到先得'
  },
  mounted () {
    this.$on('onClickCliper', () => {
      this.remove()
      console.log('点击蒙层')
    });
    this.$on('onClose', () => {
      this.remove()
      console.log('点击关闭按钮')
    });
    this.$on('onCancel', () => {
      this.remove()
      console.log('点击取消按钮')
    });
    this.$on('onConfirm', () => {
      this.remove()
      console.log('点击确定按钮')
    });
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 方法methods

也可以在methods中重新覆盖组件的方法,进行重写。注意:重写时可能需要处理额外的事情。

方法 说明
onClickCliper 点击蒙层
onClose 点击关闭按钮
onCancel 点击取消按钮
onConfirm 点击确定按钮

如:

this.$dialog({
  propsData: {
    showTitle: true,
    showCloseBtn: true,
    titleText: '请完成实名认证',
    message: '实名认证后您可以得到0~10万的人民币奖励,名额有限,先到先得'
  },
  methods: {
    onClickCliper () {
      this.remove()
      console.log('点击蒙层')
    },
    onClose () {
      this.remove()
      console.log('点击关闭按钮')
    },
    onCancel () {
      this.remove()
      console.log('点击取消按钮')
    },
    onConfirm () {
      this.remove()
      console.log('点击确定按钮')
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 特别提示

dialog组件处理了内部滑动,保证弹出时无法滑动弹窗。对于弹窗内容需要滑动时,给需要滑动的元素增加 class="scrollable"

Last Updated: 12/12/2019, 7:37:32 PM

注:因PC端浏览存在最小12px字号的原因,部分视图下文字会显示比较大,手机端访问正常。