写一个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防止表单重复提交实现代码
Sep 05 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
May 07 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
浅析在javascript中创建对象的各种模式
May 06 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
解决vue-cli3 使用子目录部署问题
Jul 19 Javascript
node.js学习笔记之koa框架和简单爬虫练习
Dec 13 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
js数组去重的方法总结
Jan 18 Javascript
node.js中fs文件系统模块的使用方法实例详解
Feb 13 Javascript
微信小程序实现加入购物车滑动轨迹
Nov 18 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 导出Excel示例分享
2014/08/18 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
Android笔试题总结
2014/11/29 面试题
找工作最新求职信
2013/12/22 职场文书
入党自我评价范文
2014/02/02 职场文书
绿色城市实施方案
2014/03/19 职场文书
服务标兵事迹材料
2014/05/04 职场文书
村党支部公开承诺书
2014/05/29 职场文书
公共场所标语
2014/06/30 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
工程部文员岗位职责
2015/02/04 职场文书
贷款担保书范本
2015/09/22 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
python实现简单倒计时功能
2021/04/21 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python
详解MySQL的内连接和外连接
2023/05/08 MySQL