Vue-函数式组件

最近在开发项目的时候,定制了一个公司内部样式的Modal模态框组件。

Modal组件伪代码

<!-- Modal/index.vue-->
<template><div class="modal-container" id="modalContainer"><!-- Modal Content --><div class="modal-content"><!-- Close Button --><span class="modal-close" @click="props.cancel">&times;</span><!-- Modal Header --><div class="modal-header">{{ props.title }}</div><!-- Modal Body --><div class="modal-body"><p>{{ props.content }}</p></div><!-- Modal Footer --><div class="modal-footer"><button class="button secondary" @click="props.cancel">{{ props.cancelButtonText }}</button><button class="button primary" @click="props.confirm">{{ props.confirmButtonText }}</button></div></div></div>
</template><script setup name="Modal">const props = defineProps({title: {type: String,default: 'Modal Title',},content: {type: String,default: 'This is the modal content.',},confirmButtonText: {type: String,default: 'Confirm',},cancelButtonText: {type: String,default: 'Cancel',},confirm: {type: Function,default: () => {},},cancel: {type: Function,default: () => {},},})
</script><style scoped>
.modal-container {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.5);z-index: 999;
}/* Styles for the modal content */
.modal-content {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);background-color: #fff;padding: 20px;border-radius: 4px;box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);width: 300px;
}/* Styles for the close button */
.modal-close {position: absolute;top: 10px;right: 10px;cursor: pointer;
}/* Styles for the modal header */
.modal-header {font-weight: bold;margin-bottom: 10px;
}/* Styles for the modal body */
.modal-body {margin-bottom: 20px;
}/* Styles for the modal footer */
.modal-footer {text-align: right;
}/* Example styles for buttons */
.button {padding: 8px 16px;border: none;border-radius: 4px;cursor: pointer;
}.primary {background-color: #1890ff;color: #fff;
}.secondary {background-color: #ccc;
}
</style>

使用组件

<template><button @click="toggleModal">Show Modal</button><Modal v-if="modalVisible" v-bind="modalProps"></Modal>
</template><script setup>import { ref } from 'vue'import Modal from '../components/Modal/index.vue'const modalProps = {title: '弹窗标题',content: '弹窗内容,弹窗内容',confirmButtonText: '确认',cancelButtonText: '取消',confirm() {console.log('confirm')toggleModal()},cancel() {console.log('cancel')toggleModal()}}const modalVisible = ref(false)function toggleModal() {modalVisible.value = !modalVisible.value}
</script>

调用成功
在这里插入图片描述

改造支持函数形式调用

由于使用频率很高,每次都引入组件再使用略显麻烦,于是决定改造一下,支持函数调用该Modal组件

  1. 新建js文件,导入Modal.vue(单文件组件实际上是一个JS对象)
  2. 使用vue提供的createApp实例化Modal.vue组件,第一个参数是组件,第二个参数是传递给组件的props
  3. 创建一个div标签并插入body,调用modal实例下的mount方法挂载到div上。
  4. 销毁Modal:调用unmount方法并移除div元素
// Modal/index.js
import { createApp } from 'vue'
import Modal from './index.vue'export function showModal(props = {}) {// 创建一个div并插入bodyconst div = document.createElement('div')document.body.appendChild(div)// 创建一个modal实例const modal = createApp(Modal, {...props,// 劫持取消事件,卸载组件cancel() {props.cancel()unMount()},// 劫持确认事件,卸载组件confirm() {props.confirm()unMount()}})// 挂载到div上modal.mount(div)// 卸载组件function unMount() {modal.unmount()div.remove()}
}

函数式调用

<template><div>函数式调用:<button @click="handleClick">Show Modal</button></div>
</template><script setup name="FunctionComponent">import { showModal } from '../components/Modal';const modalProps = {title: '弹窗标题',content: '弹窗内容,弹窗内容',confirmButtonText: '确认',cancelButtonText: '取消',confirm() {console.log('confirm')},cancel() {console.log('cancel')}}// 函数式调用function handleClick() {showModal(modalProps)}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

45.ubuntu Linux系统安装教程

目录 一、安装Vmware 二、Linux系统的安装 今天开始了新的学习&#xff0c;Linux,下面是今天学习的内容。 一、安装Vmware 这里是在 Vmware 虚拟机中安装 linux 系统&#xff0c;所以需要先安装 vmware 软件&#xff0c;然 后再安装 Linux 系统。 所需安装文件&#xff1a;…

Java-接口

目录 1.接口的概念 2.语法规则 3.接口使用 4.接口特性 5.实现多个接口 6.接口间的继承 7.接口使用实例 1.接口的概念 电脑的USB口上&#xff0c;可以插&#xff1a;U盘、鼠标、键盘等所有符合USB协议的设备&#xff1b;数据线的type-c口上&#xff0c;可以插手机&#xf…

Spring源码篇(九)自动配置扫描class的原理

文章目录 前言ClassLoader如何加载jar包里的class自动配置扫描class的原理spring中的加载方式源码总结 前言 spring是怎样通过ComponentScan&#xff0c;或者自动配置扫描到了依赖包里class的&#xff1f; ClassLoader 这里涉及到了class Loader的机制&#xff0c;有些复杂&…

Unity Image(RawImage) 实现按轴心放大缩小,序列化存储轴心信息,实现编译器窗口保存轴心

工作时分配给我的要实现的功能&#xff0c;写的时候遇到挺多的坑的&#xff0c;在此记录一下 效果 放大缩小的效果 2.编译器扩展窗口记录 实现点 1.Json序列化存储图片轴心位置, 放大倍率&#xff0c;放大所需要的事件 2.用了编译器扩展工具便于保存轴心信息坑点 1.Imag…

飞桨AI Studio可以玩多模态了?MiniGPT4实战演练!

MiniGPT4是基于GPT3的改进版本&#xff0c;它的参数量比GPT3少了一个数量级&#xff0c;但是在多项自然语言处理任务上的表现却不逊于GPT3。项目作者以MiniGPT4-7B作为实战演练项目。 创作者&#xff1a;衍哲 体验链接&#xff1a; https://aistudio.baidu.com/aistudio/proj…

前端如何打开钉钉(如何唤起注册表中路径与软件路径不关联的软件)

在前端唤起本地应用时&#xff0c;我查询了资料&#xff0c;在注册表中找到腾讯视频会议的注册表情况&#xff0c;如下&#xff1a; 在前端代码中加入 window.location.href"wemeet:"; 就可以直接唤起腾讯视频会议&#xff0c;但是我无法唤起钉钉 之所以会这样&…

leetcode每日一题Day2——344. 反转字符串

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

【css】css实现一个简单的按钮

四种链接状态分别是&#xff1a; a:link - 正常的&#xff0c;未访问的链接a:visited - 用户访问过的链接a:hover - 用户将鼠标悬停在链接上时a:active - 链接被点击时 <style> a:link, a:visited {//未访问、访问过background-color: #07c160;//设置背景颜色color: wh…

【ASP.NET MVC】使用动软(五)(13)

一、问题 前文完成的用户登录后的首页如下&#xff1a; 后续账单管理、人员管理等功能页面都有相同的头部&#xff0c;左边和下边&#xff0c;唯一不同的右边内容部分&#xff0c;所以要解决重复设计的问题。 二、解决方法——使用布局页 在Views上右键添加新建项&#xff…

基于量子同态加密的改进多方量子私有比较

摘要量子同态加密在隐私保护方面具有明显的优势。本文提出了一种改进的基于量子同态加密的多方量子私钥比较协议。首先&#xff0c;引入可信密钥中心&#xff0c;安全辅助加密密钥的分发和解密密钥的更新&#xff0c;同时防止恶意服务器发布虚假结果的攻击;在保证所有参与者得到…

RPC原理与Go RPC详解

文章目录 RPC原理与Go RPC什么是RPC本地调用RPC调用HTTP调用RESTful API net/rpc基础RPC示例基于TCP协议的RPC使用JSON协议的RPCPython调用RPC RPC原理 RPC原理与Go RPC 什么是RPC RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;即远程过程调用。它允许像调用…

Spring Boot 配置多数据源【最简单的方式】

Druid连接池 Spring Boot 配置多数据源【最简单的方式】 文章目录 Druid连接池 Spring Boot 配置多数据源【最简单的方式】 0.前言1.基础介绍2.步骤2.1. 引入依赖2.2. 配置文件2.3. 核心源码Druid数据源创建器Druid配置项 DruidConfig 3.示例项目3.1. pom3.1.1. 依赖版本定义3.…

matlab使用教程(8)—绘制三维曲面图

1网格图和曲面图 MATLAB 在 x-y 平面中的网格上方使用点的 z 坐标来定义曲面图&#xff0c;并使用直线连接相邻的点。mesh 和surf 函数以三维形式显示曲面图。 • mesh 生成仅使用颜色来标记连接定义点的线条的线框曲面图。 • surf 使用颜色显示曲面图的连接线和面。 MATL…

网络安全 Day26-PHP 简单学习

PHP 简单学习 1. 为什么要学习PHP2. PHP语法3. php 变量4. 字符串数据5. PHP 函数6. 数组 1. 为什么要学习PHP php存量多开源软件多很多安全流程 渗透方法 sql注入基于PHP语言入门简单 2. PHP语法 格式: <?php 内容?>或<?内容?>结尾分号例子<?php phpin…

深度学习实践——循环神经网络实践

系列实验 深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 代码可见于&#xff1a;https://download.csdn.net/download/weixin_51735061/88131380?spm1001.201…

【Linux】进程间通信——管道

目录 写在前面的话 什么是进程间通信 为什么要进行进程间通信 进程间通信的本质理解 进程间通信的方式 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 什么是匿名管道 匿名管道通信的原理 pipe()的使用 匿名管道通信的特点 拓展代码 命名管道 什么是命…

ChatGPT结合知识图谱构建医疗问答应用 (二) - 构建问答流程

一、ChatGPT结合知识图谱 上篇文章对医疗数据集进行了整理&#xff0c;并写入了知识图谱中&#xff0c;本篇文章将结合 ChatGPT 构建基于知识图谱的问答应用。 下面是上篇文章的地址&#xff1a; ChatGPT结合知识图谱构建医疗问答应用 (一) - 构建知识图谱 这里实现问答的流程…

备忘录模式——撤销功能的实现

1、简介 1.1、概述 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤。当新的状态无效或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原。当前很多软件都提供了撤销&#xff08;Undo&#xff09;操作&#xf…

Spring AOP

1.什么是 Spring AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;面向切面编程&#xff0c;它是⼀种思想&#xff0c;它是对某⼀类事情的集中处理。⽐如⽤户登录权限的效验&#xff0c;没学 AOP 之前&#xff0c;我们所有需要判断⽤户登…

ClickHouse(七):Clickhouse数据类型-2

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…