写一个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 相关文章推荐
多个datatable共存造成多个表格的checkbox都被选中
Jul 11 Javascript
JQuery中两个ul标签的li互相移动实现方法
May 18 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
基于JS实现类似支付宝支付密码输入框
Sep 02 Javascript
图片懒加载插件实例分享(含解析)
Jan 09 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
关于react-router的几种配置方式详解
Jul 24 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 Javascript
JavaScript实现多球运动效果
Sep 07 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
Sep 16 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对数组内元素进行随机调换的方法
2015/05/12 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
详解python中的文件与目录操作
2017/07/11 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
乐观自信演讲稿范文
2014/05/21 职场文书
学生安全责任书范本
2014/07/24 职场文书
预备党员转正材料
2014/12/19 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server