Vue.js弹出模态框组件开发的示例代码


Posted in Javascript onJuly 26, 2017

前言

在开发项目的过程中,经常会需要开发一些弹出框效果,但原生的alert和confirm往往都无法满足项目的要求。这次在开发基于Vue.js的读书WebApp的时候总共有两处需要进行提示的地方,因为一开始就没有引入其他的组件库,现在只好自己写一个模态框组件了。目前只是一个仅满足当前项目需求的初始版本,因为这个项目比较简单,也就没有保留很多的扩展功能。这个组件还是有很多扩展空间的,可以增加更多的自定义内容和样式。这里只介绍如何去开发一个模态框组件,有需要进行更多扩展的,可以根据自己的需求自行开发。

组件模板

<template>
<div class="dialog">
 <div class="mask"></div>
 <div class="dialog-content">
  <h3 class="title">{{ modal.title }}</h3>
  <p class="text">{{ modal.text }}</p>
  <div class="btn-group">
   <div class="btn" @click="cancel">{{ modal.cancelButtonText }}</div>
   <div class="btn" @click="submit">{{ modal.confirmButtonText }}</div>
  </div>
 </div>
</div>
</template>

模态框结构分为:头部标题、提示内容和操作区域。同时一般还会有一个遮罩层。此次需求比较简单,也无需图标等内容,所以结构上写的也比较简单。实际开发中可根据需求对结构进行相应的调整。

组件样式

.dialog {
 position: relative;

 .dialog-content {
  position: fixed;
  box-sizing: border-box;
  padding: 20px;
  width: 80%;
  min-height: 140px;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  border-radius: 5px;
  background: #fff;
  z-index: 50002;
  .title {
   font-size: 16px;
   font-weight: 600;
   line-height: 30px;
  }
  .text {
   font-size: 14px;
   line-height: 30px;
   color: #555;
  }
  .btn-group {
   display: flex;
   position: absolute;
   right: 0;
   bottom: 10px;
   .btn {
    padding: 10px 20px;
    font-size: 14px;
    &:last-child {
     color: #76D49B;
    }
   }
  }
 }
 .mask {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  z-index: 50001;
  background: rgba(0,0,0,.5);
 }
}

样式比较简单,就不多说了。

组件接口

export default {
 name: 'dialog',
 props: {
  dialogOption: Object
 },
 data() {
  return {
   resolve: '',
   reject: '',
   promise: '', // 保存promise对象
  }
 },
 computed: {
  modal: function() {
   let options = this.dialogOption;
   return {
    title: options.title || '提示',
    text: options.text,
    cancelButtonText: options.cancelButtonText ? options.cancelButtonText : '取消',
    confirmButtonText: options.confirmButtonText ? options.confirmButtonText : '确定',
   }
  }
 },
 methods: {
  //确定,将promise断定为完成态
  submit() {
   this.resolve('submit');
  },
  // 取消,将promise断定为reject状态
  cancel() {
   this.reject('cancel');
  },
  //显示confirm弹出,并创建promise对象,给父组件调用
  confirm() {
   this.promise = new Promise((resolve, reject) => {
    this.resolve = resolve;
    this.reject = reject;
   });
   return this.promise; //返回promise对象,给父级组件调用
  }
 }

}

在模态框组件中定义了三个方法,核心的方法是confirm,此方法是提供给父级组件调用的,返回一个promise对象。使用promise对象主要是为了异步调用,因为很多时候我们使用模态框时需要根据返回结果再进行下一步处理。

扩展提示:

如果需要扩展的话,可以通过props的dialogOption传递更多的字段,在computed中进行判断,比如增加一个字段isShowCancelButton可以控制取消按钮是否显示。其他扩展同理。

调用

<v-dialog v-show="showDialog" :dialog-option="dialogOption" ref="dialog"></v-dialog>

this.showDialog = true;
this.$refs.dialog.confirm().then(() => {
 this.showDialog = false;
 next();
}).catch(() => {
 this.showDialog = false;
 next();
})

源码地址

Dialog组件源码

实现效果

Vue.js弹出模态框组件开发的示例代码

Vue.js弹出模态框组件开发的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery html()等方法介绍
Nov 18 Javascript
JS判断是否360安全浏览器极速内核的方法
Jan 29 Javascript
JavaScript基础知识及常用方法总结
Jan 10 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
Aug 05 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 jQuery
浅谈Angular2 模块懒加载的方法
Oct 04 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
Apr 16 Javascript
浅谈如何优雅处理JavaScript异步错误
Nov 12 Javascript
解决 window.onload 被覆盖的问题方法
Jan 14 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 #Javascript
node实现简单的反向代理服务器
Jul 26 #Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 #Javascript
Vue中计算属性computed的示例解读
Jul 26 #Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 #Javascript
Bootstrap datepicker日期选择器插件使用详解
Jul 26 #Javascript
js实现图片轮播效果学习笔记
Jul 26 #Javascript
You might like
php.ini 配置文件的深入解析
2013/06/17 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
php-msf源码详解
2017/12/25 PHP
php unlink()函数使用教程
2018/07/12 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
Js,alert出现乱码问题的解决方法
2013/06/19 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
综合素质的自我鉴定
2013/10/07 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
房屋出售授权委托书
2014/10/12 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
js前端图片加载异常兜底方案
2022/06/21 Javascript