我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue3.2+ts如何实现在方法中可调用的拟态框弹窗

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue3.2+ts如何实现在方法中可调用的拟态框弹窗

这篇“vue3.2+ts如何实现在方法中可调用的拟态框弹窗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3.2+ts如何实现在方法中可调用的拟态框弹窗”文章吧。

直接上图。

vue3.2+ts如何实现在方法中可调用的拟态框弹窗

解决代码如下:

import { createApp } from 'vue'import MessageBoxVue from './MessageBox.vue' \\你写的拟态框样式export const MessageBox = (text: any) => {    return new Promise((resolve, reject) => {        const capp = createApp(MessageBoxVue, text)        const container = document.createElement('div')        const instance = capp.mount(container)        document.body.insertBefore(container, document.body.firstChild)//插入到body最前面,层级更高        instance.callback = (val: any) => {            if (val) {                resolve(val)            } else {                reject()            }            capp.unmount()//注销            document.body.removeChild(container)//点击后清除弹窗        }        instance.close = () => {            capp.unmount()            document.body.removeChild(container)        }    })}
//重点在这儿//这边相当于把数据当方法使了。我也不知道什么原理。在上面那边就是能接收到回调。const cancel = () => {    callback.value(false)}const confirm = () => {    callback.value(true)}const closeBox = () => {    close.value()}//抛出这两个方法?反正这个方法不可或缺。defineExpose({    callback,    close})
\\这一段是上面的那个messagebox<template>    <div ref="MessageBox" class="message-box" :>        <div class="message-box-icon">            <i class="iconfont" : v-html="iconType"></i>        </div>        <div class="message-box-container">            <div class="message-box-title">{{ title }}</div>            <div v-if="isHtml" v-html="content"></div>            <p v-else class="message-box-content">{{ content }}</p>            <div class="message-box-btn">                <span v-if="isCancel" class="cancel" @click="cancel">{{ cancelVal }}</span>                <span v-if="isConfirm" class="confirm" @click="confirm">{{ confirmVal }}</span>            </div>        </div>        <i v-if="closeIcon" class="iconfont cencel-box" @click="closeBox">&#xe618;</i>    </div></template><script setup lang="ts">import { computed, CSSProperties, ref } from 'vue'const props = defineProps({    type: {        type: String,        default: 'warning'    },    title: {        type: String,        default: ''    },    content: {        type: String,        default: ''    },    isHtml: {        type: Boolean,        default: false    },    width: {        type: Number,        default: 416    },    isCancel: {        type: Boolean,        default: true    },    cancelVal: {        type: String,        default: '取消'    },    confirmVal: {        type: String,        default: '确定'    },    isConfirm: {        type: Boolean,        default: true    },    closeIcon: {        type: Boolean,        default: false    }})const callback = ref()const close = ref()const cw = document.documentElement.clientWidthconst ch = document.documentElement.clientHeight// eslint-disable-next-line vue/return-in-computed-propertyconst iconType = computed(() => {    switch (props.type) {        case 'warning':            return '&#xe603;'        case 'info':            return '&#xe601;'        case 'error':            return '&#xe602;'        case 'success':            return '&#xe604;'    }})// eslint-disable-next-line vue/return-in-computed-propertyconst iconColor = computed(() => {    switch (props.type) {        case 'warning':            return '#FF7402'        case 'info':            return '#0C64EB'        case 'error':            return '#FF4D4F'        case 'success':            return '#36B23B'    }})const messageBoxWrapperStyleStyle = computed<CSSProperties>(() => {    return {        top: `${ch / 2 - 200 > 200 ? ch / 2 - 200 : 200}px`,        left: `${cw / 2 - props.width / 2}px`,        width: `${props.width}px`    }})const cancel = () => {    callback.value(false)}const confirm = () => {    callback.value(true)}const closeBox = () => {    close.value()}defineExpose({    callback,    close})</script><style lang="scss" scoped>.cencel-box {    position: absolute;    top: 15px;    right: 20px;    cursor: pointer;}.message-box {    position: absolute;    border-radius: 5px;    z-index: 2001;    display: flex;    background: #ffffff;    padding: 20px 20px 20px 32px;    box-shadow: 0px 0px 20px 0px rgba(6, 0, 1, 0.1);    .message-box-icon {        margin-right: 12px;        line-height: 38px;        .iconfont {            font-size: 25px;        }    }    .message-box-container {        width: calc(100% - 25px);        .message-box-title {            font-size: 16px;            color: #333333;            line-height: 38px;        }        .message-box-content {            margin: 10px 0px 20px;            font-size: 14px;            min-height: 48px;            color: #999999;            line-height: 18px;            // letter-spacing: 0.5px;        }    }    .message-box-btn {        float: right;        .cancel {            height: 32px;            line-height: 30px;            display: inline-block;            text-align: center;            width: 90px;            box-sizing: border-box;            border: 1px solid #d9d9d9;            border-radius: 3px;            color: #333333;            cursor: pointer;        }        .cancel:hover {            color: #0c64eb;            border-color: #0c64eb;        }        .confirm {            height: 32px;            width: 90px;            display: inline-block;            text-align: center;            line-height: 32px;            margin-left: 10px;            background-color: #0c64eb;            border-radius: 3px;            color: #ffffff;            cursor: pointer;        }        .confirm:hover {            background-color: #2373eb;        }    }}</style>

引入全局后的调用

// 使用:// 在main.ts全局引入,也可以按需引入这里展示全局引入 import {MessageBox} from 'base/class="lazy" data-src/components/MessageBox/index'// 注册: app.config.globalProperties.$messageBox = MessageBox// 引用: import { getCurrentInstance } from 'vue' const { proxy } = getCurrentInstance() const fn = ()=>{     proxy         .$messageBox({ //这边就是传你在MessageBox的props定义的父传子的数据了             title: '是否确定编辑/删除数据?',             content: '作业已经发布,如果重新编辑/删除,会清空所有学生 作业提交状态请谨慎操作!'         })        .then(() => {            console.log(1234)         })         .catch(() => {             console.log(12345)         })}

以上就是关于“vue3.2+ts如何实现在方法中可调用的拟态框弹窗”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue3.2+ts如何实现在方法中可调用的拟态框弹窗

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

下载Word文档

猜你喜欢

vue3.2+ts如何实现在方法中可调用的拟态框弹窗

这篇“vue3.2+ts如何实现在方法中可调用的拟态框弹窗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3.2+ts如
2023-07-04

在PHP中如何实现方法在其他文件中的调用?

在PHP中如何实现方法在其他文件中的调用对于PHP开发者来说,有时候我们会需要在一个文件中编写某些方法,然后在其他文件中调用这些方法。这种情况下,我们可以使用PHP的命名空间(namespace)和require/include语句来实现
在PHP中如何实现方法在其他文件中的调用?
2024-03-05

如何在PHP中实现参数前面加“…”的调用方法

在PHP中实现参数前面加“...”的调用方法,其实就是使用可变长度参数(variadic argument)。可变长度参数允许函数接受任意数量的参数。在PHP中,通过在函数定义时在参数前加上三个点“...”,就可以将该参数定义为可变长度参数
如何在PHP中实现参数前面加“…”的调用方法
2024-03-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录