全局弹窗组件实现

全局弹窗组件实现

使用函数式组件实现。框架采用Vue、bootstrap。

当我们写好一个组件时,这个组件功能大体上可能都是差不多的,但是要在很多地方调用,通常的组件要在template中引入才行。

在饿了么UI组件中,有的对话框组件只是调用函数即可完成,通常来说组件调用不应该很麻烦,在原生的JS中调用警告提示只需要alert即可。

效果展示

在这里插入图片描述

实现方式

按照bootstrap的要求大体布置如下,在div标签中判断当前需要什么样的组件类型。之后只需要传递:消息、消息类型、关闭按钮逻辑。

<svg style="display: none" xmlns="http://www.w3.org/2000/svg">
  <symbol id="check-circle-fill" viewBox="0 0 16 16">
   <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z" />
  </symbol>
  <symbol id="info-fill" viewBox="0 0 16 16">
   <path
    d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"
   />
  </symbol>
  <symbol id="exclamation-triangle-fill" viewBox="0 0 16 16">
   <path
    d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"
   />
  </symbol>
</svg>

<div :class="`alert alert-${type} d-flex align-items-center animate__animated animate__fadeIn`" role="alert">
  <svg v-show="type === 'info'" aria-label="Info:" class="alter-svg bi bi-exclamation-triangle-fill flex-shrink-0 me-2" role="img">
   <use xlink:href="#info-fill" />
  </svg>
  <svg v-show="type === 'success'" aria-label="Success:" class="alter-svg bi bi-exclamation-triangle-fill flex-shrink-0 me-2" role="img">
   <use xlink:href="#check-circle-fill" />
  </svg>
  <svg v-show="type === 'warning'" aria-label="Warning:" class="alter-svg bi bi-exclamation-triangle-fill flex-shrink-0 me-2" role="img">
   <use xlink:href="#exclamation-triangle-fill" />
  </svg>
  <svg v-show="type === 'danger'" aria-label="Danger:" class="alter-svg bi flex-shrink-0 me-2" role="img">
   <use xlink:href="#exclamation-triangle-fill" />
  </svg>

  <div>{{ message }}</div>
  <button aria-label="Close" class="btn-close" data-bs-dismiss="alert" style="margin: 0 0 0 8px; width: 4px; height: 15px" type="button" @click="close"></button>
</div>
<style lang="scss" scoped>
.alert {
	position: fixed;
	top: 10%;
	left: 50%;
	transform: translate(-50%, -10%);
	height: 30px;
	z-index: 99999;

	.alter-svg {
		width: 15px;
		height: 30px;
	}
}
</style>

props内容

<script lang="ts" setup>
defineProps(['message', 'type', 'close']);
</script>

封装成函数使用

import { App, createApp } from 'vue';
import Alerts from '@/components/Message/index.vue';

/**
 * 函数式消息组件
 * @param message
 * @param type
 */
const handleMessage = (message: string, type: string) => {
  // 创建标签并将标签放到body上
  const mountNode: any = document.createElement('div');
  document.body.appendChild(mountNode);

  // 配置内容是组件中的props
  const app: App<Element> = createApp(Alerts, {
   message,
   type,
   close: () => {
    app.unmount();
    document.body.removeChild(mountNode);
   },
  });

  // 挂载组件
  app.mount(mountNode);

  // 定时关闭
  setTimeout(() => {
   app.unmount();
   document.body.removeChild(mountNode);
  }, 2000);
};

export const Message = {
  success: (message: string) => handleMessage(message, 'success'),
  error: (message: string) => handleMessage(message, 'danger'),
  primary: (message: string) => handleMessage(message, 'info'),
  warning: (message: string) => handleMessage(message, 'warning'),
};

createApp(组件名称,props函数),props中内容在{}中完成。

创建组件之后记得销毁。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/715938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三.苹果支付 - 漏单补单处理

介绍 苹果的支付流程并不复杂&#xff0c;我们可以在很短的时间内实现正常的支付流程。 但是苹果支付有一个很大特点就是慢&#xff0c;包括唤起支付弹窗&#xff0c;点击完成到服务端验单完成&#xff0c;整个流程很长&#xff0c;任何一个环节都有可能因为断网&#xff0c;…

kubesphere踩过的坑,持续更新....

踩过的坑 The connection to the server lb.kubesphere.local:6443 was refused - did you specify the right host… 另一篇文档中 dashboard 安装 需要在浏览器中输入thisisunsafe,即可进入登录页面 ingress 安装的问题 问题描述&#xff1a; 安装后通过命令 kubectl g…

Oracle 是否扼杀了开源 MySQL

Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家&#xff0c;曾在MySQL公司担任性能工程师。大约15年前&#xff0c;当甲骨文收购Sun公司并随后收购MySQL时&#xff0c;有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…

【系统架构设计师】一、计算机系统基础知识(指令系统|存储系统|输入输出技术|总线结构)

目录 一、指令系统 1.1 计算机指令 1.2 指令寻址方式 1.3 CISC 与 RISC 1.4 指令流水线 二、存储系统 2.1 分级存储体系 2.2 地址映射 2.3 替换算法 2.4 磁盘 2.4.1 磁盘结构和参数 2.4.2 磁盘调度算法 三、输入输出技术 四、总线结构 五、考试真题练习 一、指令…

【PL理论】(29) OOP:面向对象编程 | 案例研究:C++ 中的类 | 继承 | 继承和指针 | Object-oriented Programming

&#x1f4ad; 写在前面&#xff1a;本章我们将进入 Object-oriented Programming&#xff0c;面向对象编程的讲解&#xff0c;探讨 C 中的类&#xff0c;继承等。 目录 0x00 面向对象编程 0x01 C语言中的结构体 0x02 案例研究&#xff1a;C 中的类 0x03 术语 0x04 继承&…

12.3 Go 测试覆盖率

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

关于 python request 的 response 返回 b‘\xa3\xff\xff\x11E .....‘ 类型的数据的解决方案

最近写开发一个爬虫&#xff0c; 程序在本地好好的&#xff0c;返回的是正常的 html&#xff0c; 但是到了生产环境&#xff0c;不知道为什么返回的是一堆乱码 长这样&#xff1a; 查了好几天都没有进展&#xff0c; 对其进行各种转码均无效 今天终于找到解决办法了&#xff…

LabVIEW回热系统热经济性分析及故障诊断

开发了一种利用LabVIEW软件的电厂回热系统热经济性分析和故障诊断系统。该系统针对火电厂回热加热器进行优化&#xff0c;通过实时数据监控与分析&#xff0c;有效提高机组的经济性和安全性&#xff0c;同时降低能耗和维护成本。系统的实施大幅提升了火电厂运行的效率和可靠性&…

永久删除的文件如何恢复?记好这4个方法,轻松恢复文件!

“在清理电脑时&#xff0c;我一不小心把一些还需要的文件永久删除了&#xff0c;不知道大家有没有方法可以恢复这些文件呢&#xff1f;” 在数字时代&#xff0c;我们的生活和工作几乎都离不开电脑和各类存储设备。然而&#xff0c;随着数据的不断增长&#xff0c;误删文件、格…

DNS响应时间分析

目录 什么是DNS响应时间&#xff1f; 为什么DNS响应时间很重要&#xff1f; AnaTraf流量分析仪DNS分析 在当今数字化时代&#xff0c;网络的稳定性和性能对企业的运营至关重要。作为IT运维人员&#xff0c;我们的职责是确保网络顺畅运行&#xff0c;而DNS&#xff08;域名系…

想做副业,如何发现用户需求呢?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

关于电脑文件的规划思考

概述 设置C、D、E、F 四个盘 C盘&#xff1a;系统数据使用&#xff0c;操作系统、其他软件需要用到的系统性资源 D盘&#xff1a;应用软件区 的使用&#xff0c;数据库、navacat、idea、visual studio、浏览器、向日葵、虚拟机…… E盘&#xff1a;工作区&#xff1a;公司资料…

【云】各家云服务器介绍

文章目录 各主流云服务厂商个人开发者购买什么够用优惠信息 各主流云服务厂商 腾讯云&#xff1a; 优点&#xff1a;腾讯云在程序员圈子中享有“良心云”的美誉&#xff0c;主要是因为其价格性价比高&#xff0c;续费价格也不贵。腾讯云提供了多款云服务器配置&#xff0c;如2核…

物流货运单怎么打印,佳易王货物运单打印查询统计管理系统操作教程

物流货运单怎么打印&#xff0c;佳易王货物运单打印查询统计管理系统操作教程 一、前言 以下软件操作教程以&#xff0c;佳易王物流货运单管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 软件操作教程 1、物流开单点击导航栏 物流开单…

碉堡了!云原生大佬撰写的K8s学习指南,有点炸裂,建议运维都收藏!

在这个数字化转型的时代&#xff0c;容器化和云原生技术已成为软件开发的重要趋势。【Kubernetes】作为云原生领域的旗舰项目&#xff0c;不仅是一种容器编排工具&#xff0c;更是构建现代、弹性和可扩展应用程序的基础平台。 因此&#xff0c;对于运维人员来说&#xff0c;学…

【第四篇】SpringSecurity的HttpSecurity详解

SpringSecurity的XML文件配置 在配置文件中通过 security:http 等标签来定义了认证需要的相关信息 SpringSecurity的HttpSecurity配置 在SpringBoot项目中,脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity等工具类,这里HttpSecurity就等同于在配置文件中定…

【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 )

文章目录 一、Graham 凸包扫描算法1、凸包概念2、常用的凸包算法3、Graham 凸包扫描算法 二、Graham 算法前置知识点1、角排序2、叉积3、算法过程分析 三、代码示例1、完整代码示例2、执行结果 使用 Graham 算法绘制的凸包效果 : 博客代码下载 : https://download.csdn.net/d…

【编程语言】Python平台化为何比Java差?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

[Shell编程学习路线]——if条件语句(单,双,多分支结构)详细语法介绍

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月17日7点50分 &#x1f004;️文章质量&#xff1a;95分 文章目录 ————前言———— &#x1f4af;趣站&#x1f4af…

AI大模型在运动项目的深度融合和在穿戴设备的实践及未来运动健康技术发展

文章目录 1. 技术架构2. 模型选择2.1 LSTM&#xff08;长短期记忆网络&#xff09;2.2 CNN&#xff08;卷积神经网络&#xff09;2.3 Transformer 3. 数据处理数据预处理 4. 实时性要求4.1 边缘计算4.2 模型优化 5. 数据隐私与安全6. 深入分析AI大模型在穿戴设备的应用和未来发…