当前位置: 首页 > news >正文

vue3使用tsx自定义弹窗组件

1.在ts代码中使用css

我这里使用了@styils/vue,npm install @styils/vue --save-dev,在tsx文件中引入即可:import { styled } from "@styils/vue";

2.在tsx中初始化组件,创建在src的utils目录中创建messagebox.tsx

import { createApp} from "vue";
// 这里使用了element-plus的组件,请自行引入即可
import { ElButton } from "element-plus";
import { styled } from "@styils/vue";const DivModal = styled('div', {position: 'fixed',width: '100%',height: '100%',left: 0,top: 0,background: '#00000050',display: 'flex',justifyContent: 'center',alignItems: 'center'
});const DivBox = styled('div', {display: 'flex',minWidth: '25%',background: '#fff',padding: '10px 0',color: '#333',borderRadius: '10px',boxShadow: '0 0 3px #00000080',flexDirection: 'column',alignItems: 'center'
});const DivText = styled('div', {marginBottom: '1em'
});const Messagebox = {props: {msg: {type: String,required: true},},render(ctx: any) {const { $props, $emit } = ctx;return (<DivModal class="modal"><DivBox class="box"><DivText class="text">{$props.msg}</DivText><div onClick={$emit('onClick(e)')}><ElButton type="primary">确 定</ElButton></div></DivBox></DivModal>);},
};export function showMsg(msg: String, isModal: Boolean | null, onClickHandler: Function) {const div = document.createElement("div");document.body.appendChild(div);const app = createApp(Messagebox,{msg,onClick(e: any) {if (isModal) {onClickHandler(() => {app.unmount();div.remove();});} else {const isButton = e.target.localName === "button" || e.target.innerText === "确定";if (isButton) {onClickHandler(() => {app.unmount();div.remove();});}}}});app.mount(div);
};

3.在vue中使用该组件

<template><el-button type="primary" @click="showTsxMsg">显示tsx封装的弹窗</el-button>
</template><script lang="ts" setup>
import { showMsg } from "@/utils/messagebox";const showTsxMsg = () => {showMsg("tsx封装的组件", true, (close: Function) => {close();});
};
</script>

http://www.lryc.cn/news/239546.html

相关文章:

  • [笔记] 错排问题 #错排
  • Ajax进阶
  • RedisTemplate使用详解
  • 6.Gin 路由详解 - GET POST 请求以及参数获取示例
  • CMakeLists.txt基础指令与cmake-gui生成VS项目的步骤
  • IT应用运维最常用指标
  • Go中各种newreader和newbuffer的使用
  • visual studio 如何建立 C 语言项目
  • app小程序定制开发的优势|企业软件网站建设
  • 物联网AI MicroPython学习之语法 WDT看门狗外设
  • JVM线程的几种状态
  • 基于单片机停车场环境监测系统仿真设计
  • 每日一题:LeetCode-589.N叉树的前序遍历
  • PTA 7-2 简单计算器
  • 9、鸿蒙应用桌面图标外观和国际化
  • oracle rac 19c修改不同网段public ip
  • 【Django-DRF用法】多年积累md笔记,第(4)篇:Django-DRF反序列化详解
  • OpenAI宣布暂停ChatGPT plus用户订阅,解决方案,无需等待立马升级
  • 如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中
  • 小程序存在优惠卷遍历,但是歪了
  • HarmonyOS第一课-对比Kotlin,快速入门TypeScript
  • 【自动驾驶】一些业内自动驾驶专业术语释义
  • 好用的博客评论系统 Valine 使用及避坑指南
  • 【Mysql】[Err] 1293 - Incorrect table definition;
  • SpringBoot——日志及原理
  • 7种SQL的进阶用法
  • Unity--互动组件(Scrollbar)||Unity--互动组件(DropDown )
  • Unity、UE和Godot的优劣对比
  • CMAK Kafka可视化管理工具
  • PHP如何持续监听Redis的消息订阅并推送到前端?