vue3 + TS 自定义插件-全局message提示插件示例

本文记录 Vue3 + ts 实现自定义一个全局插件,用于进行 message 消息提示,所谓全局插件即挂载到 vue 实例上,在 App 的任一子组件中均可通过 app 的实例调用该方法。消息提示功能只是示例主要是记录 Vue3 自定义插件功能的写法。

文件结构:

src/components/Toast/index.vue 文件用于搭建和渲染消息在页面上的显示效果,比如需要显示在页面的哪个位置、字体、颜色、显示和隐藏的动画效果等;

src/components/Toast/index.ts 文件用于实现将消息的显示/隐藏等方法全局挂载到 app 实例上(注:对象写法默认需要导出一个 install() 方法),这样在 main.ts 中导入并注册该组件即可;

主要代码

index.vue 文件

<!-- 封装消息提示插件 -->
<template><Transition enter-active-class="animate__animated animate__bounceInRight"leave-active-class="animate__animated animate__bounceOutRight"><div v-if="isShow" class="message">{{ tipText }}</div></Transition>
</template><script setup lang='ts'>
import { ref, reactive } from 'vue';
let isShow = ref<boolean>(false)
let tipText = ref<string | number>('默认提示内容')
const show = (str: string | number, time: number = 3000) => {tipText.value = strisShow.value = true// 2 秒后自动关闭setTimeout(() => {isShow.value = false}, time);
}
const hide = () => isShow.value = false
// 将组件内部的方法导出,方便外部访问
defineExpose({show,hide
})
</script><style lang='less' scoped>
.message {height: 40px;line-height: 40px;padding: 0 20px;border-radius: 5px;background-color: rgba(200, 217, 217, 0.5);position: fixed;top: 50px;right: 100px;
}
</style>

index.ts 文件

import { App, createVNode, VNode, render } from 'vue'
import Toast from './index.vue'export default {install(app: App) {// 将组件转换为虚拟DOMconst Vnode: VNode = createVNode(Toast)// 将虚拟DOM挂载到页面节点上render(Vnode, document.body)// 将插件的主要方法挂载到 app.config.globalProperties 上,这里的 $toast 是自定义的app.config.globalProperties.$toast = {// 这里仅挂载了一个 show 方法到 $toast 上show(str: string | number, time?: number) {Vnode.component?.exposed?.show(str, time)},}},
}

然后在 main.ts 中导入并注册该插件

// 注册插件
import Toast from './components/Toast'
const app = createApp(App)// 只要是插件都需要进行注册,都是通过 app.use() 进行注册的
app.use(Toast)

使用插件

进行到此我们的自定义插件就已经可以在任意 App 的子组件中使用了,如:

import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
// 使用自定义的全局消息提示插件
instance?.proxy?.$toast.show('this is default message')

效果图

 

扩充声明文件 

注:以上虽然全局的消息插件是能使用了,但是因为 $toast 缺乏类型声明文件所以会报错而且其内部的方法、变量等成员均没有智能提示,所以我们还需要在 main.ts 文件中对 $toast 的成员类型进行声明main.ts 文件中关于注册该自定义插件的代码进行如下更新

// 注册插件
import Toast from './components/Toast'
const app = createApp(App)type Toast = {show: <T>(str: string | number, time?: number) => void
}
// 编写自定义插件的声明文件,防止报错,声明后也会有智能提示
declare module '@vue/runtime-core' {export interface ComponentCustomProperties {$toast: Toast}
}// 只要是插件都需要进行注册,都是通过 app.use() 进行注册的
app.use(Toast)

注:更新后如果页面中还是报错(爆红色提醒),重启服务即可,且在页面上访问 $toast 的内部成员也会有智能提示,比如 show() 方法,且该方法需要几个参数、参数需要什么类型都会有提示。至此我们 Vue3 + ts 的自定义插件就封装完成啦!

 

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

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

相关文章

用chatGPT高效学习-Vue的组件通信方式有哪些?

Vue 的组件通信方式有以下几种&#xff1a; 父子组件通信&#xff1a;父组件通过 props 向子组件传递数据&#xff0c;子组件通过 $emit 触发事件向父组件传递数据。 子父组件通信&#xff1a;子组件通过 $emit 触发事件向父组件传递数据&#xff0c;父组件通过 v-on 监听子组件…

低代码开发,是程序员的“福”还是“祸”?

编者按&#xff1a;低代码是IT界的新风口&#xff0c;它真的会抢占程序员的生存空间吗&#xff1f;本文带你来扒一扒&#xff01; 风口上的低代码 疫情肆虐下&#xff0c;低代码之火不仅没有熄灭&#xff0c;反而更加如火如荼&#xff0c;相对于传统开发&#xff0c;它的确为人…

中学生应该学会使用计算机作文,网络的利与弊中学生作文

网络的利与弊中学生作文 导语&#xff1a;生理上坏处是辐射&#xff0c;心理上的分为网上不健康内容和游戏&#xff0c;不健康内容你自己想得出来吧。以下是小编为大家收集的网络的利与弊中学生作文&#xff0c;欢迎阅读&#xff01; 网络的利与弊中学生作文(一) 所谓“一日之所…

大数据,是个没有感情的杀手?一文解析大数据时代的利和弊

01 瘆人的大数据 上个月小柒邀请闺蜜们来家喝茶聊天,大家讨论去海边的旅游计划。 聊着聊着,小爱同学突然插话:“我也要去”,吓得我赶紧拔掉了小爱的插头。 姐妹们各回各家,小柒躺下刷手机,今日头条给我推送了刚才讨论的海边民宿,顿时睡意全无…… 周末去上海学习了两…

爱思服务器能不能更新苹果手机系统,苹果手机系统升级带来的利和弊,你知道多少?...

很多手机在使用一段时间后需要系统更新升级&#xff0c;如果你觉得手机老版本出现了延迟卡顿&#xff0c;需要升级新系统才能解决这个问题&#xff0c;相信大部分人都会选择更新升级的。要是原先版本用的很顺手&#xff0c;很流畅的&#xff0c;不想升级更新&#xff0c;然后手…

android6.01升级弊端,手机系统升级带来的利和弊,你知道多少?

原标题&#xff1a;手机系统升级带来的利和弊&#xff0c;你知道多少&#xff1f; 每过一段时间&#xff0c;手机上就会有系统更新提醒&#xff0c;很多朋友会第一时间更新&#xff0c;而有朋友也许会和小编一样&#xff0c;认为“这个版本我用着挺好呀&#xff0c;为什么要更新…

Android开发——项目实例(二)迷你背单词软件(第二版)单词录入、背诵、检测、单词库

软件效果图 源码及apk&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1UkswUGQmmG6dD2fIp0VtBA 提取码&#xff1a;dbxv 如有想修改但不会的&#xff0c;欢迎私信&#xff0c;有时间的话帮你改。 要是觉得还可以&#xff0c;点个再走吧&#xff01;求求了~

android版本单词熟记APP和单词APP

单词熟记APP 帮助大家解决日常生活中英文问题&#xff0c;在APP上&#xff0c;您可以根据 中文查询 英文单词&#xff0c;也可以根据英文单词查询中文的含义&#xff0c;同时还有每日一练&#xff0c;可以进行练习单词&#xff0c;你还可以进行 类似百度的语音跟读功能。同时&a…

天天背单词--的设计与实现(一)

博客第一天,就用这个背单词软件探探路,经过二十天左右的努力&#xff0c;终于一个还算bug少一点的版本完成了&#xff0c;现在这款应用已在百度91安卓市场上架,毕竟开发者只有我,苦逼到图片都要现学ps自己做,所以维护也并不会太快&#xff0c;至于下载量能有几个人就已经很谢谢…

看图听读拼单词游戏

1&#xff0c;视觉&#xff1a;沉浸式单词应用场景图&#xff1b; 2&#xff0c;例句&#xff1a;有针对性的场景图单词例句&#xff1b; 3&#xff0c;发音&#xff1a;标准英语发音跟读&#xff1b; 4&#xff0c;拼写游戏&#xff1a;游戏是孩子的天性&#xff0c;在游戏中记…

微信背单词小程序——小鸡单词

2018-11-02 更新 UI美化没了 2018-10-30 更新 项目主页背单词微信小程序–小鸡单词 该项目已上架微信小程序市场&#xff0c;可以通过微信搜索“小鸡单词”进行使用 项目介绍 1.根据用户记忆遗忘曲线安排每天的学习计划 2.每天学习的细节比普通背单词程序更详细&#xff0c;用…

在终端里背完你的单词表

打工后没了读书时的激情&#xff0c;总感觉缺了点啥。最早为了寻找慰藉&#xff0c;开始折腾黑苹果&#xff0c;背一些单词啥的&#xff0c;但总是三天打鱼两天晒网&#xff0c;觉得没啥用。也是在百无聊赖的某一天&#xff0c;我看着macOS白底黑字的终端&#xff0c;想&#x…

美国邮政总局发行新邮票庆祝虎年;太仓阿尔卑斯雪世界项目封顶;2022年雅高大中华区将有6家酒店开业 | 美通社头条...

要闻摘要&#xff1a;美国邮政总局发行新邮票庆祝虎年。三亚启动新春假日主题文化旅游季系列活动。太仓阿尔卑斯雪世界项目封顶。南昌万怡酒店正式开业。雅高2022年推出一系列多元化新酒店。亚马逊签约第五届进博会。西门子医疗与全景医学签署战略合作协议。黑芝麻智能与MAXIEY…

全国AI特色中小学榜单发布:北京46家单位入围,上海3家

问耕 发自 凹非寺量子位 出品 | 公众号 QbitAI 去年7月&#xff0c;国务院印发《新一代人工智能发展规划》。 这个规划中要求广泛开展人工智能科普活动&#xff0c;“在中小学阶段设置人工智能相关课程&#xff0c;逐步推广编程教育。” 而中青在线最近在报道中说&#xff1a;奥…

吴江中专计算机网络技术分数线,2018中考分数线|吴江、昆山、太仓中考录取分数线出炉!截止到目前这些学校分数线已公布!...

原标题&#xff1a;2018中考分数线|吴江、昆山、太仓中考录取分数线出炉&#xff01;截止到目前这些学校分数线已公布&#xff01; 这两天&#xff0c;中考BBMM们可算忙坏了&#xff0c; 等分数线的日子比查分还要煎熬&#xff0c; 截止到目前&#xff0c; 苏外、昆山、太仓等学…

哈罗小贝异军突起 苏州太仓“文艺复兴”

苏南太仓自古为文化之乡&#xff0c;南北文化交融、江海文明相汇&#xff0c;形成了独特风格的娄东文化。吴国在这里屯粮建仓&#xff0c;元朝于此地开创“漕运文化”&#xff1b;文学先驱王世贞独主文坛20年为今天留下悠久而优秀的文化财富。今天&#xff0c;在移动阅读和新媒…

第六届“创赢太仓”全球创业大赛启动仪式暨粤港澳大湾区深圳站专场大赛顺利举办

10月10日&#xff0c;由中共太仓市委员会、太仓市人民政府主办&#xff0c;中共太仓市委人才工作领导小组办公室、太仓市人力资源和社会保障局承办&#xff0c;创成汇平台协办的第六届“创赢太仓”全球创业大赛粤港澳大湾区深圳站专场大赛联动太仓、深圳开启云端路演。太仓市人…

耐克中国物流中心三期在江苏太仓落成和运营

2019年1月10日&#xff0c;耐克中国物流中心三期开仓仪式在江苏省太仓市高新区举办。苏州市杨知评副市长&#xff0c;太仓市委沈觅书记&#xff0c;太仓市王建国市长等领导&#xff0c;耐克全球副总裁、大中华区总经理董炜&#xff0c;耐克全球运营物流副总裁Keith Lambert&…

践行绿色发展秸秆综合利用太仓模式 国稻种芯现代饲料规划

践行绿色发展秸秆综合利用太仓模式 国稻种芯现代饲料规划 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 国研智库 国情讲坛 商协社团 谋定论道 经信研究 哲商对话 万赢信采编&#xff1a;走进江苏省太仓市城厢镇东林村米厂中&#xff0c;在现代化设备的轰鸣声中&#xf…