Vue自定义全局弹窗组件操作


Posted in Javascript onAugust 11, 2020

写在前面

页面中会有很多时候需要弹窗提示,我们可以写一个弹窗组件,但是如果每个页面都引入这个组件,太麻烦了,所以我们将它变成全局组件,需要用的时候直接通过JS调用即可,不需要在每个页面引入了

效果图

Vue自定义全局弹窗组件操作

弹窗组件

新建一个弹窗的组件——popup.vue

<template>
 <transition name='fade'>
  <!-- 蒙版 -->
  <div class="mask" v-if="show" @touchmove.prevent>
   <div class="window">
    <img class="shadow" :src="imgUrl" alt="">
    <h1>{{title}}</h1>
    <p>{{content}}</p>
    <button @click="btnClick">{{btnText}}</button>
   </div>
   <img @click="show = false" v-fb class="close" src="../../../pages/signin/dialog/images/关闭.png" alt="">
  </div>
 </transition>
</template>

<script>
export default {
 name: 'app',
 data () {
  return {
   show: false,
   imgUrl: '',
   title: '',
   content: '',
   btnText: '',
   click: ''
  }
 },
 created () {
 },
 methods: {
  btnClick () {
   this.click()
   this.show = false
  }
 }
}
</script>

<style lang="less" scoped>
 @import "../../../assets/css/minx/minx";
 @import "../../../assets/css/pixel/pixel";
 // 渐变过渡
 .fade-enter,
 .fade-leave-active {
  opacity: 0;
 }
 .fade-enter-active,
 .fade-leave-active {
  transition: opacity .35s;
 }
 // 全局弹窗
 .mask {
  .fixed;
  z-index: 10;
  background:rgba(0,0,0,0.65);
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
   padding: 75/75rem;
  .window{
   height: 400/75rem;
   width: 100%;
   background: #fff;
   border-radius:8px;
   text-align: center;
   .shadow{
    width: 270/75rem;
    margin-top: -90/75rem;
   }
   h1{
    margin-top: 32/75rem;
    font-size:32/75rem;
    color:#f1300b;
    line-height:32/75rem;
    font-weight: 600;
   }
   p{
    margin-top: 32/75rem;
    font-size:28/75rem;
    color:#222222;
    line-height:40/75rem;
   }
   button{
    margin-top: 34/75rem;
    background:#f95644;
    border-radius:10px;
    width:23/75remx;
    height:64/75rem;
    font-size:28/75rem;
    color:#ffffff;
   }
  }
  .close{
   width:60/75rem;
   height:60/75rem;
   margin-top: 40/75rem;
  }
 }
</style>

popup.js文件

新建一个popup.js文件,写方法

import Vue from 'vue'
import Popup from './popup.vue'
const PopupBox = Vue.extend(Popup)

Popup.install = function (data) {
 let instance = new PopupBox({
  data
 }).$mount()

 document.body.appendChild(instance.$el)

 Vue.nextTick(() => {
  instance.show = true
  // show 和弹窗组件里的show对应,用于控制显隐
 })
}
export default Popup

main.js引入popup.js

// 自定义全局弹窗组件
import Vue from 'vue'
import Popup from './components/dialog/popup'
Vue.prototype.$popup = Popup.install

组件中使用方法

methods: {
 btnClick () {
  this.$popup({
   imgUrl: require('../../../static/images/shadow.png'), // 顶部图片
   title: '我是标题',
   content: '我是内容',
   btnText: '我是按钮',
   click: () => {
    // 点击按钮事件
    this.$router.push('……')
   }
  })
 }
}

方便以后自己使用,大家也可以参考哦,也希望大家多多支持三水点靠木,谢谢~~

Javascript 相关文章推荐
javascript 操作文件 实现方法小结
Jul 02 Javascript
javascript 最常用的10个自定义函数[推荐]
Dec 26 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
Mar 04 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
jQuery.extend 函数及用法详细
Sep 06 Javascript
bootstrap导航条实现代码
Dec 28 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
微信小程序常见页面跳转操作简单示例
May 01 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
Jun 10 Javascript
es6数组之扩展运算符操作实例分析
Apr 25 Javascript
element 动态合并表格的步骤
Dec 31 Javascript
基于Vue全局组件与局部组件的区别说明
Aug 11 #Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
Aug 11 #Javascript
vue实现图片按比例缩放问题操作
Aug 11 #Javascript
JavaScript中while循环的基础使用教程
Aug 11 #Javascript
vue-cli3 引入 font-awesome的操作
Aug 11 #Javascript
js实现列表按字母排序
Aug 11 #Javascript
Vue使用轮询定时发送请求代码
Aug 10 #Javascript
You might like
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
javascript 写类方式之七
2009/07/05 Javascript
Javascript Global对象
2009/08/13 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
播音主持女孩的自我评价分享
2013/11/20 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
律师函格式范本
2015/05/27 职场文书
高中英语教学反思范文
2016/03/02 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
linux目录管理方法介绍
2022/06/01 Servers