写一个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开源框架-jQuery使用手册(1)
Mar 10 Javascript
利用谷歌地图API获取点与点的距离的js代码
Oct 11 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
Dec 27 Javascript
js淡入淡出焦点图幻灯片效果代码分享
Sep 08 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
Oct 24 Javascript
详解Angular5 路由传参的3种方法
Apr 28 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
May 16 Javascript
详解redux异步操作实践
Aug 15 Javascript
Vue源码学习之关于对Array的数据侦听实现
Apr 23 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 Javascript
TS 类型兼容教程示例详解
Sep 23 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
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
如何快速上手Vuex
2017/02/14 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
python计算N天之后日期的方法
2015/03/31 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
python 文件操作删除某行的实例
2017/09/04 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python之django母板页面的使用
2018/07/03 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
毕业生学校推荐信范文
2014/05/21 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
学校食堂标语
2014/10/06 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
爱国主义电影观后感
2015/06/18 职场文书
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
js判断两个数组相等的5种方法
2022/05/06 Javascript