前言

在开发项目的过程中,经常会需要开发一些弹出框效果,但原生的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
# 弹出框组件
# 用vue实现模态框组件
# 使用vue实现各类弹出框组件
# 详解用vue编写弹出框组件
# vue实现点击出现操作弹出框的示例
# vue教程之toast弹框全局调用示例详解
# vue+elementui实现点击table中的单元格触发事件--弹框
# vue组件实现弹出框点击显示隐藏效果
# vue.js中toast用法及使用toast弹框的实例代码
# elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例de
# vue自定义弹框效果(确认框、提示框)
# vue实现二级弹框案例
# 模态
# 弹出
# 自己的
# 也就
# 有很多
# 说了
# 还会
# 不多
# 其他的
# 可以通过
# 自定义
# 只是一个
# 等内容
# 可以根据
# 提供给
# 经常会
# 上写
# 两处
# 大家多多
# 开发项目
相关文章:
网站制作公司排行榜,四大门户网站排名?
建站主机如何选?高性价比方案全解析
b2c电商网站制作流程,b2c水平综合的电商平台?
高端企业智能建站程序:SEO优化与响应式模板定制开发
建站之星代理费用多少?最新价格详情介绍
宝塔建站教程:一键部署配置流程与SEO优化实战指南
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站之星收费标准详解:套餐费用及年费价格表一览
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
网站制作报价单模板图片,小松挖机官方网站报价?
C++中引用和指针有什么区别?(代码说明)
网站专业制作公司有哪些,做一个公司网站要多少钱?
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何在万网开始建站?分步指南解析
兔展官网 在线制作,怎样制作微信请帖?
如何用好域名打造高点击率的自主建站?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何通过FTP服务器快速搭建网站?
建站之星如何快速更换网站模板?
移民网站制作流程,怎么看加拿大移民官网?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
教学论文网站制作软件有哪些,写论文用什么软件
?
,购物网站怎么盈利呢?
python的本地网站制作,如何创建本地站点?
历史网站制作软件,华为如何找回被删除的网站?
建站DNS解析失败?如何正确配置域名服务器?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
如何在阿里云购买域名并搭建网站?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何选择高效便捷的WAP商城建站系统?
如何快速生成专业多端适配建站电话?
招商网站制作流程,网站招商广告语?
香港服务器租用费用高吗?如何避免常见误区?
建站为何优先选择香港服务器?
,交易猫的商品怎么发布到网站上去?
,如何利用word制作宣传手册?
c# 服务器GC和工作站GC的区别和设置
如何在阿里云部署织梦网站?
建站主机是什么?如何选择适合的建站主机?
专业网站建设制作报价,网页设计制作要考什么证?
如何基于PHP生成高效IDC网络公司建站源码?
如何快速查询域名建站关键信息?
如何快速上传自定义模板至建站之星?
如何快速搭建二级域名独立网站?
北京网站制作的公司有哪些,北京白云观官方网站?
如何做静态网页,sublimetext3.0制作静态网页?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
IOS倒计时设置UIButton标题title的抖动问题
江苏网站制作公司有哪些,江苏书法考级官方网站?
宁波免费建站如何选择可靠模板与平台?
*请认真填写需求信息,我们会在24小时内与您取得联系。