写一个Vue Popup组件


Posted in Javascript onFebruary 25, 2019

组件长这样

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

写一个Vue Popup组件

写一个Vue Popup组件

期望的调用方式一

不需要等待用户二次确认

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() 二次确认事件我们不放这里实现,具体原因后面会讲
<template>
 <transition name="modal-pop">

  <div class="wrap"
     v-show="visible">

   <div class="modal">

    <h3>{{ title }}</h3>

    <p>{{ content }}</p>

    <div class="btns">
     <span v-if="showCancel"
        @click="visible = false"
        :style="`color: ${cancelColor}`">{{ cancelText }}</span>
     <span @click="handleConfirm()"
        :style="`color: ${confirmColor}`">{{ confirmText }}</span>
    </div>

   </div>

  </div>

 </transition>
</template>

<style lang="less">
@import './modal.less';
</style>

定义好 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('用户确认了!')
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js不是基础的基础
Dec 24 Javascript
基于jQuery图片平滑连续滚动插件
Apr 27 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
Apr 17 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
May 19 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
window.location.reload 刷新使用分析(去对话框)
Nov 11 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
使用jquery给指定的table动态添加一行、删除一行
Oct 13 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
Dec 01 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
Jun 19 Javascript
vue 查看dist文件里的结构(多种方式)
Jan 17 Javascript
利用Webpack实现小程序多项目管理的方法
Feb 25 #Javascript
JavaScript中构造函数与原型链之间的关系详解
Feb 25 #Javascript
JavaScript中的事件与异常捕获详析
Feb 24 #Javascript
Vue 组件注册实例详解
Feb 23 #Javascript
Vue Prop属性功能与用法实例详解
Feb 23 #Javascript
Vue自定义属性实例分析
Feb 23 #Javascript
Vue动态组件与异步组件实例详解
Feb 23 #Javascript
You might like
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
js this 绑定机制深入详解
2020/04/30 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
Android分包MultiDex策略详解
2017/10/30 Python
对python sklearn one-hot编码详解
2018/07/10 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python类成员继承重写的实现
2020/09/16 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
应届毕业生自我评价分享
2013/12/15 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
新年寄语大全
2014/04/12 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
天河观后感
2015/06/11 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang