写一个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 相关文章推荐
javascript 类定义的4种方法
Sep 12 Javascript
十个优秀的Ajax/Javascript实例网站收集
Mar 31 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
JQUERY简单按钮轮换选中效果实现方法
May 07 Javascript
js实现上一页下一页的效果【附代码】
Mar 10 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 Javascript
使用koa2创建web项目的方法步骤
Mar 12 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
Sep 07 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
Oct 31 Javascript
js实现上传图片到服务器
Apr 11 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源代码
2009/08/21 PHP
php中Smarty模板初体验
2011/08/08 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
jQuery拖动图片删除示例
2013/05/10 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
深入解析Python中的urllib2模块
2015/11/13 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
使用npy转image图像并保存的实例
2020/07/01 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
公共场所禁烟标语
2014/06/25 职场文书
中队活动总结
2014/08/27 职场文书
房产协议书范本2014
2014/09/30 职场文书
2015年党建工作总结
2015/03/30 职场文书