使用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 相关文章推荐
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 Javascript
JavaScript设计模式之抽象工厂模式介绍
Dec 28 Javascript
js如何打印object对象
Oct 16 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 Javascript
原生js制作日历控件实例分享
Apr 06 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
vue使用iframe嵌入网页的示例代码
Jun 09 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
JavaScript键盘事件响应顺序详解
Sep 30 Javascript
详谈Object.defineProperty 及实现数据双向绑定
Jul 18 Javascript
详解Vue的组件中data选项为什么必须是函数
Aug 17 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的FTP学习(二)
2006/10/09 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
python manage.py runserver流程解析
2019/11/08 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
乡镇办公室工作决心书
2014/03/11 职场文书
实习评语大全
2014/04/26 职场文书
公司募捐倡议书
2014/05/14 职场文书
总经理人事任命书
2014/06/05 职场文书
搞笑车尾标语
2014/06/23 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
Golang之sync.Pool使用详解
2021/05/06 Golang
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL