使用vue实现各类弹出框组件


Posted in Javascript onJuly 03, 2019

使用vue实现各类弹出框组件

简单介绍一下vue中常用dialog组件的封装:

实现动态传入内容,实现取消,确认等回调函数。

首先写一个基本的弹窗样式,如上图所示。

在需要用到弹窗的地方中引入组件:

import dialogBar from './dialog.vue'
components:{
  'dialog-bar': dialogBar,
},
<dialog-bar></dialog-bar>

点击一个按钮显示弹窗,并保证关闭弹窗后再次点击依旧显示

在弹窗组件中定义一个value值:v-model="sendVal",sendVal初始值为false。

在打开弹窗的方法中赋值:

openMask(){
  this.sendVal = true;
}

在dialog.vue组件中做如下操作:

props: {
  value: {}  // 注意此处获取的value对应的就是组件标签中的v-model
}

定义一个showMask变量用于控制是否显示弹窗

mounted(){
  this.showMask = this.value;  // 在生命周期中,把获取的value值获取给showMash
},
watch:{
  value(newVal, oldVal){
    this.showMask = newVal;   // 监测value的变化,并赋值。
  },
  showMask(val) {
    this.$emit('input', val);  // 此处监测showMask目的为关闭弹窗时,重新更换value值,注意emit的事件一定要为input。
  }
},

而要想关闭弹窗,只需要定义一个方法:

closeMask(){
  this.showMask = false;
},

此刻已经可以实现弹窗的显示与退出。

下面我们要实现的是动态添加标题,内容等,在组件标签中加入title,content:

<dialog-bar title="我是标题" content="我是内容"></dialog-bar>

可以运用vue的数据双向绑定,更换title,content。

在dialog.vue中获取内容:

props: {
value: {},
  content: {
    type: String,
    default: ''
  },
  title: {
    type: String,
    default: ''
  },
},

<div class="dialog-title">{{title}}</div>
<div class="content" v-html="content"></div>

我们可以运用同样的原理来获取不同按钮中的自定名称。

下面我们利用传入的不同type来确定不同的按钮,并提供不同的回调函数。

<dialog-bar title="我是标题" content="我是内容" type="danger" dangerText="这是删除按钮"></dialog-bar>

如传入type为danger,我们可以在dialog.vue中props获取type,并定义一个如下按钮:

<div v-if="type == 'danger'" class="danger-btn" @click="dangerBtn">
  {{dangerText}}
</div>

dangerBtn(){
  this.$emit('danger');  // 发送一个danger事件作为回调函数
  this.closeMask();  // 关闭弹窗
},

在标签中定义danger的回调并做一些操作:

<dialog-bar title="我是标题" content="我是内容" type="danger" dangerText="这是删除按钮" @danger="clickDanger()"></dialog-bar>

clickDanger(){
  console.log("这里是回调函数")
},

同样原理可以获取和增添一些其他的操作:

props: {
    value: {},
    // 类型包括 defalut 默认, danger 危险, confirm 确认,
    type:{
      type: String,
      default: 'default'
    },
    content: {
      type: String,
      default: ''
    },
    title: {
      type: String,
      default: ''
    },
    confirmText: {
      type: String,
      default: '确认'
    },
    cancelText: {
      type: String,
      default: '取消'
    },
    dangerText: {
      type: String,
      default: '删除'
    },
  },

<div class="btns">
  <div v-if="type != 'confirm'" class="default-btn" @click="closeBtn">
    {{cancelText}}
  </div>
  <div v-if="type == 'danger'" class="danger-btn" @click="dangerBtn">
    {{dangerText}}
  </div>
  <div v-if="type == 'confirm'" class="confirm-btn" @click="confirmBtn">
    {{confirmText}}
  </div>
</div>

点击此处去github下载弹窗代码: https://github.com/wwjhzc/vue-dialog

总结

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

Javascript 相关文章推荐
JQuery浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
jquery实现图片裁剪思路及实现
Aug 16 Javascript
使用js画图之画切线
Jan 12 Javascript
jquery获取及设置outerhtml的方法
Mar 09 Javascript
深入探讨javascript函数式编程
Oct 11 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
JS获得多个同name 的input输入框的值的实现方法
Jan 09 Javascript
Express本地测试HTTPS的示例代码
Jun 06 Javascript
pm2启动ssr失败的解决方法
Jun 29 Javascript
Node.js开发之套接字(socket)编程入门示例
Nov 05 Javascript
Node.js实现批量下载图片简单操作示例
Jan 18 Javascript
Vue按时间段查询数据组件使用详解
Aug 21 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 #Javascript
使用微信SDK自定义分享的方法
Jul 03 #Javascript
微信小程序判断页面是否从其他页面返回的实例代码
Jul 03 #Javascript
8 个有用的JS技巧(推荐)
Jul 03 #Javascript
vue swipe自定义组件实现轮播效果
Jul 03 #Javascript
20个必会的JavaScript面试题(小结)
Jul 02 #Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 #Javascript
You might like
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
远程研修随笔感言
2014/02/10 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
大学生创业项目方案
2014/03/08 职场文书
社区消防工作实施方案
2014/03/21 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
校车安全责任书
2014/08/25 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
违反学校规则制度检讨书
2015/01/01 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python