广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue extend+promise封装全局弹窗组件
  • 159
分享到

vue extend+promise封装全局弹窗组件

2024-04-02 19:04:59 159人浏览 泡泡鱼
摘要

本文实例为大家分享了Vue extend+promise封装全局弹窗组件的具体代码,供大家参考,具体内容如下 因为项目没有引入第三方UI库,所以所有的公共组件都需要自己封装现在需要一

本文实例为大家分享了Vue extend+promise封装全局弹窗组件的具体代码,供大家参考,具体内容如下

因为项目没有引入第三方UI库,所以所有的公共组件都需要自己封装
现在需要一个全局的弹窗,要有promise异步处理

实现后的效果

// components/confirm文件
<template>
  <div class="popup-wrap" v-if="showPopup">
    <div class="popup-center">
      <div class="popup-content">
        <div class="popup-close" @click="close"></div>
        <div class="title">{{ title }}</div>
        <div class="describe">{{ content }}</div>
        <div class="btn">
          <div :class="['btn-right', active == 'cancal' ? 'active' : '']" @click="handleClick('cancal')">{{cancelBtnText}}</div>
          <div :class="['btn-right', active == 'yes' ? 'active' : '']" @click="handleClick('yes')">{{yesBtnText}}</div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      showPopup: false,
      title: "", //标题
      content: "", //提示文字
      yesBtnText: "", //确定按钮
      cancelBtnText: "", //取消按钮
      promiseStatus: null,
      active: "",
    };
  },
  watch: {},
  props: {},
  mounted () {
    this.confirm()
  },
  methods: {
    confirm() {
      this.showPopup = true;
      return new Promise((resolve, reject) => {
        this.promiseStatus = { resolve, reject };
      });
    },
    handleClick(e) {
      this.active = e;
      if (e == "yes") {
        this.promiseStatus && this.promiseStatus.resolve();
      } else {
        this.promiseStatus && this.promiseStatus.reject();
      }
      this.showPopup = false
    },
    close() {
      this.showPopup = false
       this.promiseStatus && this.promiseStatus.reject();
      // this.$emit("close");
    },
  },
};
</script>
<style lang="less" scoped>
.popup-wrap {
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.6);
  position: fixed;
  top: 0rem;
  left: 0rem;
  right: 0rem;
  bottom: 0rem;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  .popup-center {
    width: 990px;
    height: 413px;
    background-size: 990px 413px;
    display: flex;
    align-items: center;
    justify-content: center;
    .popup-content {
      position: absolute;
      width: 970px;
      height: 393px;
      background: linear-gradient(
        180deg,
        rgba(5, 20, 39, 0.9) 0%,
        rgba(3, 17, 33, 0.9) 54%,
        rgba(1, 33, 74, 0.9) 100%
      );
      .popup-close {
        cursor: pointer;
        position: relative;
        top: 45px;
        left: 900px;
        width: 26px;
        height: 26px;
        border: 1px solid #fff;
        background-size: 100% 100%;
      }
      .title {
        text-align: center;
        margin-top: 50px;
        font-size: 40px;
        font-family: PingFangSC-Semibold, PingFang SC;
        font-weight: 600;
        color: #258df9;
        line-height: 56px;
        background: linear-gradient(180deg, #afebff 0%, #ffffff 100%);
        -WEBkit-background-clip: text;
        -webkit-text-fill-color: transparent;
      }
      .describe {
        text-align: center;
        margin-top: 30px;
        font-size: 28px;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        color: #a4bace;
        line-height: 40px;
      }
    }
  }
  .btn {
    width: 540px;
    height: 76px;
    margin: 0 auto;
    margin-top: 45px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    .btn-right {
      cursor: pointer;
      width: 200px;
      height: 76px;
      border: 2px solid #a4bace;
      font-size: 30px;
      font-family: PingFangSC-Regular, PingFang SC;
      font-weight: 400;
      color: #a4bace;
      line-height: 76px;
      text-align: center;
      &.active {
        border: 2px solid #258df9;
        background: rgba(37, 141, 249, 0.3);
        color: #afebff;
      }
    }
  }
}
</style>
// js文件,这个文件看你们自己吧,写在哪里都可以
// utils/confirm.js
import Confirm from '@/components/confirm.vue'
import Vue from "vue";
const ConfirmBox = Vue.extend(Confirm);

  Confirm.install = (content, title, options) => {
    if (typeof title === 'object') {
      options = title;
      title = '';
    } else if (title === undefined) {
      title = '';
    }
  
    options = Object.assign({
      title: title,
      content: content,
    }, options);
  
    let instance = new ConfirmBox({
      data: options
    }).$mount();
    document.body.appendChild(instance.$el);
    return instance.confirm();
  };
// mine.js 在根路径进行挂载
import "@/util/confirm" // 引入js
import Confirm from '@/components/confirm'  //Confirm组件
Vue.config.productionTip = false //阻止启动生产消息,常用作指令  消息提示的环境配置,设置为开发环境或者生产环境
Vue.prototype.$confirm = Confirm.install; //Confirm组
// 使用 
// home.vue
<template>
    <div @click="handleClick">点击</div>
</template>

<script>
export.default = {
    data () {},
    methdos: {
        handleClick () {
            this.$confirm("此操作将永久删除该文件, 是否继续?", "确定执行删除操作吗", {
                cancelBtnText: "取消",
                yesBtnText: "确认执行",
              })
              .then(() => {
                console.log("点击了确认按钮");
              })
              .catch(() => {
                console.log("点击了取消按钮cancel");
              });
        }
    }
}
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue extend+promise封装全局弹窗组件

本文链接: https://www.lsjlt.com/news/145515.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue extend+promise封装全局弹窗组件
    本文实例为大家分享了vue extend+promise封装全局弹窗组件的具体代码,供大家参考,具体内容如下 因为项目没有引入第三方UI库,所以所有的公共组件都需要自己封装现在需要一...
    99+
    2022-11-13
  • vue中的slot封装组件弹窗
    目录slot封装组件弹窗vue组件slot入门---弹窗组件插槽的基础使用弹窗组件slot封装组件弹窗 <template>   <el-dialog :title...
    99+
    2022-11-13
  • 怎么封装一个vue中也可使用的uniapp全局弹窗组件
    这篇文章主要介绍了怎么封装一个vue中也可使用的uniapp全局弹窗组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么封装一个vue中也可使用的uniapp全局弹窗组件文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • Vue如何封装全局toast组件
    本篇内容主要讲解“Vue如何封装全局toast组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue如何封装全局toast组件”吧!一. 借助 vue-cli...
    99+
    2022-10-19
  • vue中的slot封装组件弹窗怎么实现
    这篇文章主要介绍了vue中的slot封装组件弹窗怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue中的slot封装组件弹窗怎么实现文章都会有所收获,下面我们一起来看看吧。slot封装组件弹窗<t...
    99+
    2023-06-30
  • 封装一个vue中也可使用的uniapp的全局弹窗组件(任何页面都可以弹出)
    目录效果图:场景:思路:第一步:第二步:第三部:使用总结效果图: 场景: 当你对接websocket时,或者轮询也好,你需要获取到最新的信息,并且在任何页面弹出一个组件进行后续操作...
    99+
    2023-02-23
    uniapp 全局弹窗 vue弹窗组件 uniapp 全局组件
  • 怎么用Vue封装全局toast组件
    本篇内容介绍了“怎么用Vue封装全局toast组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. 借助...
    99+
    2022-10-19
  • Vue封装全局toast组件的应用
    这篇文章主要介绍“Vue封装全局toast组件的应用”,在日常操作中,相信很多人在Vue封装全局toast组件的应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue封装全局toast组件的应用”的疑惑有所...
    99+
    2023-06-20
  • 详解Vue全局组件的挂载之实现弹窗组件
    目录vue组件挂载类型组件挂载代码示例1.vue.extend()方法2.render函数挂载vue组件挂载类型 vue中组件的挂载分为两种类型: vue.extend() rend...
    99+
    2022-11-13
    Vue组件挂载 弹窗 Vue组件挂载 Vue弹窗组件 Vue 弹窗
  • react实现全局组件确认弹窗
    本例基于react实现了一个简单的确认弹窗,可以让我们在项目中根据需要随时调用 创建全局modal组件 此处我将弹窗模态框独立出来,用户可以通过传入组件或Element来填充模态框的...
    99+
    2022-11-13
  • Vue封装全局toast组件的完整实例
    目录前言 一. 借助 vue-cli 1. 定义 Toast 组件2. 在 main.js 里面配置3. 在其他组件内使用二、不借助 vue-cli 1. 注册 toast 组件2....
    99+
    2022-11-12
  • vue 为什么要封装全局组件引入
    目录1.为什么要封装全局组件引入2. 封装全局组件的 js3. 在 main.js 中4. 我们要引入这些公共组件就可以直接用啦1.为什么要封装全局组件引入 为何要封装一个封装全局组...
    99+
    2022-11-13
  • vue封装一个弹幕组件详解
    目录前言功能实现1、获取随机颜色随机数生成随机颜色编码生成2、随机生成弹幕出现的高度坐标3、格式化弹幕对象颜色定位4、创建弹幕对象滚动动画定义创建弹幕dom对象实例弹幕销毁弹幕循环5...
    99+
    2022-11-13
    vue封装弹幕组件 vue封装组件
  • vue中使用svg封装全局消息提示组件
    本文实例为大家分享了vue中使用svg封装全局消息提示组件的具体代码,供大家参考,具体内容如下 先看效果图 一、首先安装下载需要用到的svg相关依赖 npm install sv...
    99+
    2022-11-13
  • vue中怎么封装一个弹出框组件
    这期内容当中小编将会给大家带来有关vue中怎么封装一个弹出框组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.你需要先建一个弹出框的模板://首先创建一个mack.v...
    99+
    2022-10-19
  • vue-antd form组件封装全过程
    目录表单项–公用组件(vue-antd)1、废话不多说,先看具体效果2、组件代码如下3、在相应地方进行引入总结表单项–公用组件(vue-antd) 1、废话不...
    99+
    2023-05-17
    vue-antd form组件封装 form组件封装 vue-antd form组件
  • Vue中怎么封装一个自动化注册全局组件
    这篇文章主要介绍“Vue中怎么封装一个自动化注册全局组件”,在日常操作中,相信很多人在Vue中怎么封装一个自动化注册全局组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中怎么封装一个自动化注册全局组件...
    99+
    2023-06-25
  • vue中怎么使用svg封装全局消息提示组件
    本文小编为大家详细介绍“vue中怎么使用svg封装全局消息提示组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中怎么使用svg封装全局消息提示组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先看效果图...
    99+
    2023-06-30
  • vue自定义全局组件实现弹框案例
    本文实例为大家分享了vue自定义全局组件实现弹框案例的具体代码,供大家参考,具体内容如下 说明:本案例是封装的一个弹框页面,因为只想要一个遮罩,内容自定义。因为ElementUI上已...
    99+
    2022-11-13
  • 小程序开发实战指南之封装自定义弹窗组件
    目录1、探讨需求封装popup自定义弹窗组件2、实战开发弹窗组件2.1 子组件内容 popup.vue文件2.2 父组件引用子组件3、效果图预览3.1 不使用具名插槽的原有样式效果3...
    99+
    2022-11-13
    微信小程序自定义弹窗组件 小程序组件使用 小程序如何封装组件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作