最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 22:33:58
文档

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

Vue.js弹出模态框组件开发的示例代码:前言 在开发项目的过程中,经常会需要开发一些弹出框效果,但原生的alert和confirm往往都无法满足项目的要求。这次在开发基于Vue.js的读书WebApp的时候总共有两处需要进行提示的地方,因为一开始就没有引入其他的组件库,现在只好自己写一个模态框组件了。目
推荐度:
导读Vue.js弹出模态框组件开发的示例代码:前言 在开发项目的过程中,经常会需要开发一些弹出框效果,但原生的alert和confirm往往都无法满足项目的要求。这次在开发基于Vue.js的读书WebApp的时候总共有两处需要进行提示的地方,因为一开始就没有引入其他的组件库,现在只好自己写一个模态框组件了。目

前言

在开发项目的过程中,经常会需要开发一些弹出框效果,但原生的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组件源码

实现效果

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

Vue.js弹出模态框组件开发的示例代码:前言 在开发项目的过程中,经常会需要开发一些弹出框效果,但原生的alert和confirm往往都无法满足项目的要求。这次在开发基于Vue.js的读书WebApp的时候总共有两处需要进行提示的地方,因为一开始就没有引入其他的组件库,现在只好自己写一个模态框组件了。目
推荐度:
标签: VUE 弹出 组件
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top