博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个 Vue Popup 组件
阅读量:7267 次
发布时间:2019-06-29

本文共 2862 字,大约阅读时间需要 9 分钟。

组件长这样

主要有标题、内容、按钮个数、按钮颜色、按钮文案这些可配置项

图片描述

图片描述

期望的调用方式一

不需要等待用户二次确认

import Modal from 'common/components/modal'handleModal() {  Modal({    title: '赚取收益?',    content: '根据您的授权金额和计息天数计算得出(还未到账)。实际以到账金额为准。',    confirmText: '我知道了'  })}

期望的调用方式二

需要等待用户二次确认

import Modal from 'common/components/modal'async handleModal() {  await Modal({    title: '确定现在申请结束吗?',    content: '申请后预计1-5个工作日可退出',    cancelColor: '#ff7400',    confirmColor: '#000',    showCancel: true  })}

模板长这样

common/components/modal/modal.vue

这里用 transition 来包裹动画,填好配置参数就行了

handleConfirm() 二次确认事件我们不放这里实现,具体原因后面会讲

定义好 props 参数列表,visible 作为组件内部状态控制弹框打开关闭

export default {  props: [    'title',    'content',    'showCancel',    'cancelColor',    'cancelText',    'confirmText',    'confirmColor'  ],  data() {    return {      visible: false    }  }}

组件包装

common/components/modal/index.js

先利用 vue 的 extend 拿到刚编写的模板

import Vue from 'vue'const ModalConstructor = Vue.extend(require('./modal.vue'))const Modal = (opts = {}) => {  let _m = new ModalConstructor({ el: document.createElement('div') })}export default Modal

配置好默认参数,并将 visible 状态打开以显示弹框,最终插入页面

import Vue from 'vue'const ModalConstructor = Vue.extend(require('./modal.vue'))const Modal = (opts = {}) => {  let _m = new ModalConstructor({ el: document.createElement('div') })  _m.title = opts.title || '提示'  _m.content = opts.content || ''  _m.showCancel = opts.showCancel || false  _m.cancelText = opts.cancelText || '取消'  _m.cancelColor = opts.cancelColor || '#000'  _m.confirmText = opts.confirmText || '确定'  _m.confirmColor = opts.confirmColor || '#ff7400'  _m.visible = true  document.body.appendChild(_m.$el)}export default Modal

用户点击二次确认事件后,为了方便组件外部捕捉,这里使用 Promise 包装回调事件

这样 handleConfirm() 放在这里实现是不是就方便很多了
import Vue from 'vue'const ModalConstructor = Vue.extend(require('./modal.vue'))const Modal = (opts = {}) => {  let _m = new ModalConstructor({ el: document.createElement('div') })  _m.title = opts.title || '提示'  _m.content = opts.content || ''  _m.showCancel = opts.showCancel || false  _m.cancelText = opts.cancelText || '取消'  _m.cancelColor = opts.cancelColor || '#000'  _m.confirmText = opts.confirmText || '确定'  _m.confirmColor = opts.confirmColor || '#ff7400'  _m.visible = true  document.body.appendChild(_m.$el)  return new Promise(resolve => {    return (_m.handleConfirm = () => {      _m.visible = false      resolve()    })  })}export default Modal

最终长这样

import Modal from 'common/components/modal'async handleModal() {  await Modal({    title: '确定现在申请结束吗?',    content: '申请后预计1-5个工作日可退出',    cancelColor: '#ff7400',    confirmColor: '#000',    showCancel: true  })  console.log('用户确认了!')}

转载地址:http://xtfcm.baihongyu.com/

你可能感兴趣的文章
Html中的表格
查看>>
树莓派进阶之路 (017) - 树莓派的专用摄像头实现局域网监控
查看>>
使用yum高速部署Oracle安装环境(11g)
查看>>
推断数组中的反复元素
查看>>
sqlplus中怎么将你全部的操作和结果记录保存到你指定的文件里
查看>>
【Unity笔记】摄像机、图片的模糊处理
查看>>
Xcode 中的小技巧
查看>>
支付宝接口
查看>>
为什么要有指针?
查看>>
zabbix客户端一键安装脚本
查看>>
base64 数据编码原理
查看>>
iOS -- 网络/本地 图片 按自定义比例缩放 不失真 方法
查看>>
关于tensorflow conv2d卷积备忘的一点理解
查看>>
用研关键三步骤:问题、方法与分析
查看>>
struts中json机制与普通页面跳转机制混用(全局结果集配置返回json)
查看>>
MySQL加密解密
查看>>
ASP.NET Core 使用Redis存储Session
查看>>
json格式转换
查看>>
ExpressRoute 合作伙伴和对等位置
查看>>
5.IntellijIDEA常用快捷键总结
查看>>