vue弹出框组件封装实例代码


Posted in Javascript onOctober 31, 2019

新学vue,参考别人封装弹出层组件。好用!

1.你需要先建一个弹出框的模板:

//首先创建一个mack.vue
<template>
 <div class="mack" v-if="isShow">
  <div class="mackWeb" :style="text.mackStyle">
   <div class="title font_b" v-if="text.title" :style="text.titleStyle">{{text.title.trim()}}</div>
   <div class="mesg font_s" v-if="text.mesg" :style="text.mesgStyle">{{text.mesg.trim()}}</div>
   <div v-html="text.cntMsg"></div>
   <div class="footb font_s">
    <div
     class="foot_l borderlf borderTop"
     @click="cancel"
     v-if="text.cancel"
     :style="text.cancelValStyle"
    >{{text.btn.cancelVal}}</div>
    <div
     class="foot_r borderTop"
     @click="confirm"
     v-if="text.confirm"
     :style="text.confirmValStyle"
    >{{text.btn.confirmVal}}</div>
   </div>
  </div>
 </div>
</template>

//写js
<script>
 export default {
  data() {
   return {
    isShow: true,
    text: {
     title: "",
     mesg: "",
     cnTmesg: "",
     cancel: true,
     confirm: true,
     mackStyle: null,
  titleStyle: null,
  mesgStyle:null,
     cancelValStyle: null,
     confirmValStyle: null,
     btn: {
      confirmVal: "确定",
      cancelVal: "取消"
     }
    }
   };
  },
  methods: {
   cancel() {
    this.isShow = false;
   },
   confirm() {
    this.isShow = false;
   }
  }
};
</script>

//css
<style scoped lang='less'>
 .mack {
 position: fixed;
 width: 100%;
 height: 100%;
 overflow: hidden;
 top: 0;
 left: 0;
 background: rgba(21, 21, 21, 0.7);
 .font_b {
  font-size: 14/50rem;
  color: #231a2f;
 }
 .font_s {
  font-size: 12/50rem;
  color: #655a72;
 }
 .borderTop {
  border-top: 1/50rem solid #e4e4e4;
 }
 .mackWeb {
  background: #ffffff;
  width: 300/50rem;
  min-width: 300/50rem;
  margin: auto;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  .title {
   text-align: center;
   padding: 15/50rem 15/50rem 0 15/50rem;
  }
  .mesg {
   padding: 15/50rem;
   text-align: center;
  }
  .footb {
   display: inline-table;
   width: 100%;
   .borderlf {
    border-right: 1/50rem solid #e4e4e4;
   }
   div {
    display: table-cell;
    box-sizing: border-box;
    text-align: center;
    padding: 10/50rem 0;
   }
  }
 }
}
</style>

2.接着你需要一个js:mackjs.js

import Vue from 'vue';
import confirm from './mack';
let confirmConstructor = Vue.extend(confirm);
let theConfirm = function (text) {
  return new Promise((res, rej) => { //promise封装,ok执行resolve,no执行rejectlet
   let confirmDom = new confirmConstructor({  
    el: document.createElement('div')
   })
   document.body.appendChild(confirmDom.$el); //new一个对象,然后插入body里面
   confirmDom.text = Object.assing( confirmDom.text,text);  //为了使confirm的扩展性更强,这个采用对象的方式传入,所有的字段都可以根据需求自定义
   confirmDom.ok = function () {
    res()
    confirmDom.isShow = false
   }
   confirmDom.close = function () {
    rej()
    confirmDom.isShow = false
   }
  })
 }
 export default theConfirm; 
  //暴露出去,别忘记挂载到vue的原型上 
  //  => 在main.js里面先引入 import theConfirm from './components/confirm/confirm.js'
  //  => 再挂载 Vue.prototype.$confirm = theConfirm;
  //在需要的地方直接用以下方法调用即可:
  //  this.$confirm({
  //   type:'提示',
  //   msg:'是否删除这条信息?',
  //   btn:{
  //     ok:'yes',
  //     no:'no'
  //   }
  // }).then(() => {
  //   console.log('ok')
  // })
  // .catch(() => {
  //   console.log('no')
  // })

-3.你接着需要在main.js导入这个文件

import macksjs from './assets/mackjs'
Vue.prototype.$confirm= macksjs ;

-4.最后在你需要引入的vue文件中直接调用就好了

<button @click="deleteaas">我是弹出框</button>
 methods:{
  deleteaas() {
   this.$confirm({
    title: "addd",
    mesg: "您确定不再关注该客户吗?",
    cntMsg: '<div class="helAA">你好</div>',
    cancelValStyle:{color:'red'},
    btn: {
     confirmVal: "确a定",
     cancelVal: "取a消"
    }
   })
    .then(() => {
     console.log("yes");
     //点击确定之后的处理
    })
    .catch(() => {
     console.log("no");
    });
  }
 }

导入

总结

以上所述是小编给大家介绍的vue弹出框组件封装实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery 位置插件
Dec 25 Javascript
JavaScript 全角转半角部分
Oct 28 Javascript
JS实现图片横向滚动效果示例代码
Sep 04 Javascript
将Datatable转化成json发送前台实现思路
Sep 06 Javascript
Javascript基础教程之变量
Jan 18 Javascript
js改变Iframe中Src的方法
May 05 Javascript
node网页分段渲染详解
Sep 05 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
让Vue也可以使用Redux的方法
May 23 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
解决vue keep-alive 数据更新的问题
Sep 21 Javascript
vue如何安装使用Quill富文本编辑器
Sep 21 Javascript
使用zrender.js绘制体温单效果
Oct 31 #Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 #Javascript
selenium+java中用js来完成日期的修改
Oct 31 #Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 #Javascript
vue项目出现页面空白的解决方案
Oct 31 #Javascript
vue项目引入ts步骤(小结)
Oct 31 #Javascript
微信小程序canvas分享海报功能
Oct 31 #Javascript
You might like
两个强悍的php 图像处理类1
2009/06/15 PHP
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
8个必备的PHP功能开发
2015/10/02 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python 文件与目录操作
2008/12/24 Python
Python接收手机短信的代码整理
2020/08/02 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
会计专业大学生职业生涯规划书
2014/02/11 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
婚前协议书范本两则
2014/10/16 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
逃课检讨书范文
2015/05/06 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
Golang 实现WebSockets
2022/04/24 Golang
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers