vue弹窗组件的实现示例代码


Posted in Javascript onSeptember 10, 2018

vue弹窗组件的样子

我们先看一下,我们要实现出来的弹窗组件长什么样子:

vue弹窗组件的实现示例代码vue弹窗组件的实现示例代码

呐,我们要用vue组件实现的弹窗就是这个样子,跟我们用js插件实现的效果一样,下面我们开始讲述怎么实现一个通用的vue弹窗组件。

实现vue弹窗组件需要的知识

是vue组件,当然最基础的是vue的知识,我假设大家是有一定vue功底的,然后你还需要了解:

1、vue的事件系统,vue组件间的单项数据流,props从父组件向子组件传递数据,子组件通过事件emit向父组件传递事件,父组件通过on监听子组件的事件来处理具体事务。

vue弹窗组件的实现示例代码

2、具名插槽slot,通过name属性来接收不同的父组件传递过来的内容,具名插槽接收两个数据,一是弹窗的标题,二是弹窗的显示内容。

vue弹窗组件的实现代码

vue弹窗的具体实现代码采用单页面组件的形式写的,具体代码如下:

<template>
  <div class='md-cont' v-show='showstate'>
    <div class='md-wrapper' >
      <div class='md-title'>
      <slot name='tlt' >
        标题
      </slot>
      </div>
      <div class='md-text'>
      <slot name='text' >
        这里是弹框内容
      </slot>
      </div>
      <div class='footer'>
        <div v-if='type=="confirm"' @click='tocancel' class='md-btn'>取消</div>
        <div class='md-btn' @click='took'>确定</div>
      </div>
    </div>
  </div>
</template>
<script>
export default{
  name:'modal',
  props:['type','showstate'],
  methods:{
    tocancel:function(){
      this.$emit('tocancel');
    },
    took:function(){
      this.$emit('took');
    }
  }
}
</script>
<style scoped>
.md-cont{position:fixed;left:0;right: 0;top:0;bottom: 0;
  z-index: 500;background:rgba(0,0,0,0.3);text-align:center;
  overflow: hidden;white-space:nowrap;}
.md-cont:after{content:"";display:inline-block;width:0;
height:100%;visibility: hidden;vertical-align:middle;}
.md-wrapper{display:inline-block;vertical-align:middle;
  background:#fff;color:#333333;font-size:0.34rem;
  padding-top:0.2rem;border-radius: 0.1rem;max-width:100%;}
.md-title{font-size:0.34rem;text-align:center;line-height:0.6rem;}
.md-text{font-size:0.25rem;text-align:center;line-height:0.4rem;padding:0.2rem 0.5rem;}
.footer{display:flex;border-top:0.01rem solid #E5E5E5;
  line-height:0.88rem;color:#488BF1;font-size:0.32rem;}
.md-btn{flex:1;}
.md-btn +.md-btn{border-left:0.01rem solid #E5E5E5;}
</style>

组件中模版代码很简单,其中主要的就是两个具名插槽slot;两个按钮触发两个事件,这两个事件通过$emit上传到父组件。根据父组件传递过来的type属性来决定是否显示取消按钮。

对于具名插槽和$emit事件系统不理解的可以去vue官网查看,这里不多做赘述了。

vue弹窗组件的使用

在父组件里面使用弹窗组件也是很方便的,如果你是bootstrap的使用者或者爱好者,你会对这种使用方式感到熟悉和亲切。

下面我展示使用代码:

<template>
<div>
  <div class='aft-box'>
      <div class='aft-flex aft-pd'>
        <div class='aft-btn' @click='alerts'>alert</div>
      </div>
      <div class='aft-flex aft-pd'>
        <div class='aft-btn aft-blue' @click='confirms'>confirm</div>
      </div>
  </div>
  <Modal type='alert' @took='okfall' :showstate='showa'>
      <span slot='tlt'>提示</span>
      <div slot='text'>我是一个alert提示弹窗</div>
  </Modal>
  <Modal type='confirm' @took='okfall2' @tocancel='cancelfall' :showstate='showc'>
      <span slot='tlt'>确认</span>
      <div slot='text'>{{msg}}</div>
  </Modal>
</div>
</template>
<script>
import Modal from './modal'
export default{
  name:'container',
  components:{
    Modal
  },
  data(){
    return {
      showa:false,
      showc:false,
      msg:"我有两个按钮,是confirm确认弹窗"
    }
  },
  methods:{
    alerts(){
      this.showa=true;
    },
    confirms(){
      this.showc=true;
      this.msg="我有两个按钮,是confirm确认弹窗";
    },
    okfall(){
      this.showa=false;
    },
    okfall2(){
      this.msg="点击了确认按钮,2秒后弹窗关闭";
      setTimeout(()=>{
        this.showc=false;
      },2000);
    },
    cancelfall(){
      this.showc=false;
    }
 
  }
}
</script>
<style>
.aft-box{display:flex;line-height:0.65rem;font-size:0.26rem;color:#333;padding:0.5rem 0;}
.aft-flex{flex:1;}
.aft-pd{padding:0.5rem 0.1rem;}
.aft-btn{display:block;line-height:0.88rem;text-align:Center;
  color:#fff;border-radius: 0.12rem;background:#FFB63B ;}
.aft-blue{background:#488BF1;}
</style>

这里我们需要先通过import引入modal弹窗组件,再在父组件里面通过components属性声明使用此组件。

然后在template模版中通过Modal标签使用弹窗组件;

在弹窗组件上通过type来设置弹窗的特性;

通过:showstate属性来标识弹窗的打开和关闭;

通过@took来设置确定按钮点击后的操作;

通过@tocancel来确定取消按钮点击后的操作;

在Modal标签中通过内容上的slot属性来标识内容是标题还是显示内容,slot='tlt'中的文字将会作为弹窗标题显示,slot='text'的文字将会作为弹窗的正文显示;

在这里你也可以通过{{msg}}插值表达式的形式来把内容和父组件的数据绑定到一块;

在script中我们通过data中的两个变量showa和showb来标识弹框的打开和关闭;

页面中的按钮事件中通过设置showa和showb的值来打开和关闭弹窗。

vue弹窗组件结语

这样一个vue弹窗组件就算完成了,使用简单灵活,哪里需要引入到里面就可以使用了,而且其中的内容和标题可以自由设置,而且vue弹窗组件相对于js弹窗插件来说实现起来更简单,更清晰。只是我们需要很好的掌握vue提供的特性以及能够按照vue所在的思想框架进行思考。而vue开中的重要思想就是:我们操作数据,页面变化dom操作交给vue来处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
Mar 10 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
js解决弹窗问题实现班级跳转DIV示例
Jan 06 Javascript
JavaScript给url网址进行encode编码的方法
Mar 18 Javascript
深入分析javascript中的错误处理机制
Jul 17 Javascript
JS HTML5实现拖拽移动列表效果
Aug 27 Javascript
微信小程序页面传值实例分析
Apr 19 Javascript
jQuery选择器之属性过滤选择器详解
Sep 28 jQuery
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
解决vue动态为数据添加新属性遇到的问题
Sep 18 Javascript
puppeteer库入门初探
Jan 09 Javascript
浅谈React中组件逻辑复用的那些事儿
May 21 Javascript
vue axios数据请求及vue中使用axios的方法
Sep 10 #Javascript
vue插件实现v-model功能
Sep 10 #Javascript
在Angular中使用JWT认证方法示例
Sep 10 #Javascript
详解vue-router传参的两种方式
Sep 10 #Javascript
详解Vue.js使用Swiper.js在iOS
Sep 10 #Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 #Javascript
在Vue 中使用Typescript的示例代码
Sep 10 #Javascript
You might like
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
Python中Random和Math模块学习笔记
2015/05/18 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
Python实现DDos攻击实例详解
2019/02/02 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
python爬虫之遍历单个域名
2019/11/20 Python
python编写微信公众号首图思路详解
2019/12/13 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
煤矿班组长的职责
2013/12/25 职场文书
少先队入队活动方案
2014/02/08 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
幼儿园小班评语
2014/04/18 职场文书
销售员态度差检讨书
2014/10/26 职场文书
演讲开场白台词大全
2015/05/29 职场文书
休学证明范本
2015/06/19 职场文书