写一个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 进度条效果实现代码整理
May 21 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 Javascript
js改变embed标签src值的方法
Apr 10 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
jQuery改变form表单的action,并进行提交的实现代码
May 25 Javascript
JS及PHP代码编写八大排序算法
Jul 12 Javascript
AngularJS入门教程之链接与图片模板详解
Aug 19 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
CKEditor4配置与开发详细中文说明文档
Oct 08 Javascript
JS实现简单的抽奖转盘效果示例
Feb 16 Javascript
vue实现带复选框的树形菜单
May 27 Javascript
vue如何限制只能输入正负数及小数
Jul 04 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安装全攻略:APACHE
2006/10/09 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php字符集转换
2017/01/23 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python类属性与实例属性用法分析
2015/05/09 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
python 图像增强算法实现详解
2021/01/24 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
护士求职推荐信范文
2013/11/23 职场文书
学生评语大全
2014/04/18 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
收入证明范本
2015/06/12 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书