Vue 3 自定义插件开发
Vue3 自定义插件开发
插件简介
Vue3 插件是一种能为 Vue 应用添加全局功能的工具。插件可以包含:
- 全局组件注册
- 全局指令添加
- 全局方法注入
- 全局 mixin 混入
- 向 Vue 应用实例注入属性
插件的基本结构
Vue3 插件应该暴露一个 install 方法,该方法将在插件安装时被调用:
interface Plugin {install: (app: App, options?: any) => void
}
开发一个简单插件
让我们通过一个实例来了解如何开发一个基础插件。这个插件将提供一个全局提示框功能。
1. 创建插件文件
// plugins/toast/index.ts
import { App } from 'vue'
import Toast from './Toast.vue'export default {install: (app: App, options = {}) => {// 创建一个全局提示框组件const toast = {show(message: string) {// 创建提示框逻辑}}// 注册全局组件app.component('Toast', Toast)// 注入全局属性app.config.globalProperties.$toast = toast// 通过 provide/inject 提供依赖app.provide('toast', toast)}
}
2. 创建组件文件
<!-- plugins/toast/Toast.vue -->
<template><transition name="toast-fade"><div v-if="visible" class="toast-wrapper">{{ message }}</div></transition>
</template><script>
import { ref, defineComponent } from 'vue'export default defineComponent({name: 'Toast',props: {message: {type: String,required: true}},setup() {const visible = ref(false)return {visible}}
})
</script><style scoped>
.toast-wrapper {position: fixed;top: 20px;left: 50%;transform: translateX(-50%);padding: 10px 20px;background: rgba(0, 0, 0, 0.7);color: white;border-radius: 4px;
}.toast-fade-enter-active,
.toast-fade-leave-active {transition: opacity 0.3s ease;
}.toast-fade-enter-from,
.toast-fade-leave-to {opacity: 0;
}
</style>
3. 使用插件
// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import ToastPlugin from './plugins/toast'const app = createApp(App)// 安装插件
app.use(ToastPlugin, {duration: 3000 // 配置选项
})app.mount('#app')
4. 在组件中使用
<template><button @click="showToast">显示提示</button>
</template><script>
import { getCurrentInstance } from 'vue'export default {setup() {const { proxy } = getCurrentInstance()const showToast = () => {proxy.$toast.show('这是一条提示消息!')}return {showToast}}
}
</script>
插件的高级特性
1. TypeScript 支持
为了更好的类型支持,我们可以扩展 Vue 的类型定义:
// types/index.d.ts
import { Toast } from './toast'declare module '@vue/runtime-core' {export interface ComponentCustomProperties {$toast: Toast}
}
2. 插件选项处理
interface ToastOptions {duration?: numberposition?: 'top' | 'bottom'theme?: 'light' | 'dark'
}export default {install: (app: App, options: ToastOptions = {}) => {const defaultOptions: ToastOptions = {duration: 3000,position: 'top',theme: 'dark'}const mergedOptions = { ...defaultOptions, ...options }// 使用合并后的选项}
}
3. 生命周期钩子
插件可以在安装时注册全局生命周期钩子:
app.mixin({mounted() {console.log('Component mounted')}
})
相关文章:
Vue 3 自定义插件开发
Vue3 自定义插件开发 插件简介 Vue3 插件是一种能为 Vue 应用添加全局功能的工具。插件可以包含: 全局组件注册全局指令添加全局方法注入全局 mixin 混入向 Vue 应用实例注入属性 插件的基本结构 Vue3 插件应该暴露一个 install 方法,该方法将在插件…...
使用最小花费爬楼梯(DP)
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例 1ÿ…...
【Ubuntu】如何在Ubuntu系统中查看端口是否可用
文章目录 前言一、使用netstat命令二、使用ss命令三、使用lsof命令四、使用nc(netcat)命令总结 前言 本文介绍了如何在Ubuntu系统中查看端口是否可用的方法,并给出了具体的命令示例,帮助用户通过命令行工具检测端口的开放状态。 …...
Hive基础面试-如何理解复用率的
1. 模型的复用率你们是怎么做的? 简单直白的说就是你的模型复用率如何,在业务方是否认可该模型,也是衡量模型建设的一个标准,复用率数:数仓模型涉及的核心是追求模型的复用和共享,引用系数越高,…...
Go 常量为什么只支持基本数据类型?
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
DatePicker 日期选择器的使用(当日、近一周、近一月...)
template部分 <el-form-item label"操作日期:" style"margin-left: 50px;"><el-date-pickerv-model"dateRange"type"datetimerange"range-separator"~"start-placeholder"开始日期"end-placeholder&quo…...
【H2O2|全栈】JS进阶知识(六)ES6(2)
目录 前言 开篇语 准备工作 Set和Map 基本概念 Set 相互转化 常见属性和API 数组去重 并集、交集和差集 Map 转化 常见的属性和API Set和Map的区别 This的指向 function函数 箭头函数 修改this 使用方式 三种方式的异同 案例 更改this指向为obj 求数组数…...
聊聊主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
聊聊主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别 一、JDK8二、JDK11三、JDK17四、JDK21 一、JDK8 JDK 8 发布于 2014 年,是 Java 语言的一个重要里程碑,带来了许多革命性的特性,改变了 Java 开发的方式。 主要更新的…...
MFC工控项目实例三十二模拟量校正值添加修改删除
用两个列表控件实现三十二模拟量校正值添加、修改、删除。 相关代码 void SenSet::OnSelchangeList1() //修改 {m_bAdd_2.EnableWindow(true);m_bParameter_2.EnableWindow(true);m_bDel_2.EnableWindow(false);nSel m_IDC_LIST1.GetCurSel();m_IDC_LIST1.GetText(nSel,nSel_…...
力扣第 60 题 “第 k 个排列”
题目描述 给定整数 n 和 k,返回由 1 到 n 组成的排列中第 k 个排列。 所有排列按字典序排列。1 ≤ n ≤ 9,1 ≤ k ≤ n!。 解题思路 要快速找到第 k 个排列,可以利用数学方法而不是生成所有排列: 1. 知识点:阶乘与…...
国际环境和背景下的云计算领域
前言 在当前国际环境和背景下,云计算领域呈现出复杂多变的局面,其发展深受技术创新、地缘政治、全球经济以及监管政策的影响。以下从技术趋势、市场竞争、地缘政治和监管环境四个方面详细解析云计算领域的现状。 一、技术趋势:多云与边缘计算…...
logstash 解析数组格式json数据:split, json
1,需求说明 原始数据格式: 1条 (2*2)》4个指标数据 [{"app":"aa","url":"www.1.com","metrics":[{"name":"cpu","value":11},{"name&quo…...
Linux的开发工具(二)
1.vim的基本操作 正常模式到插入模式 输入a 输入i 输入o 示例 输入iao下面的就会变成INSERT模式 插入模式到正常模式 按Esc键 正常模式到低行模式 shift; :w保存当前文件 :wq保存并退出 :q!强制退出 2.vi…...
Bokeh实现大规模数据可视化的最佳实践
目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…...
Oracle表碎片整理与优化
Oracle数据库中的表碎片整理与优化是一个重要的维护任务,可以显著提高数据库的性能。表碎片通常是由于频繁的插入、删除和更新操作导致的。以下是一些常见的方法和步骤,帮助你进行表碎片整理与优化。 1. 识别碎片表 首先,需要识别哪些表存在…...
【华为云函数工作流】python的函数中如何获取请求链接中带的参数
背景 通过调用函数的url,将参数传递给函数执行,函数里如何获取这个参数 过程 下一个简单的demo如下 参考这个链接https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0420.html写一个demo,这个是百度视频云获取token的…...
最新Kali安装详细版教程(附安装包,傻瓜式安装教程)
本文主要详细介绍 kali 的安装过程,以及安装完成后的基本设置,比如安装增强工具,安装中文输入法以及更新升级等操作。 文章目录 实验环境准备工作步骤说明安装虚拟机安装 Kali安装增强工具安装中文输入法更新升级 实验环境 VMware &#x…...
【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用
最终效果 文章目录 最终效果前言为什么使用CharacterControllerSimpleMove和Move如何选择?1. SimpleMove2. Move 配置CharacterController参数控制相机移动跳跃方式一方式二 下蹲处理下坡抖动问题实现奔跑和不同移速控制完整代码补充,简单版本 实现物理碰…...
66 mysql 的 表自增长锁
前言 mysql 的表锁之 AUTO_INC, 是我们自增长的时候做并发控制的锁 主要是用于 自增长生成新的 id 的时候的控制 在前面的文档中, 我们又看到 mysql 这边自增长的处理的相关的大概脉络 但是 对于一些 并发控制的细节, 我们当时 应该是直接忽略掉了 我们这里就来看一下…...
神经网络问题之一:梯度消失(Vanishing Gradient)
梯度消失(Vanishing Gradient)问题是深度神经网络训练中的一个关键问题,它主要发生在反向传播过程中,导致靠近输入层的权重更新变得非常缓慢甚至几乎停滞,严重影响网络的训练效果和性能。 图1 在深度神经网络中容易出现…...
大数据:Hadoop(Yarn)
第1章 Yarn资源调度器Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。1.1 Yarn基础架构1.2 Yarn工作机制(1)…...
拯救者笔记本性能优化终极指南:如何用Lenovo Legion Toolkit释放硬件潜力
拯救者笔记本性能优化终极指南:如何用Lenovo Legion Toolkit释放硬件潜力 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionTool…...
从Simulink模型到神经网络:一个完整的数据驱动建模与验证实践
1. 为什么需要从Simulink模型转向神经网络? 在控制系统工程领域,Simulink模型一直是建模和仿真的黄金标准。但最近几年,越来越多的工程师开始尝试用神经网络来替代传统模型。这背后有几个关键原因: 首先,传统物理模型在…...
别再死记参数了!深入Halcon measure_pos算子底层:从高斯滤波到亚像素边缘的完整推导
深入解析Halcon measure_pos算子:从数学原理到工程调优 在工业视觉检测领域,亚像素级边缘检测一直是核心难题。当我们使用Halcon这类专业工具时,measure_pos算子看似简单易用,但真正理解其底层机制的人却寥寥无几。本文将带您穿透…...
StructBERT文本相似度模型Java开发实战:SpringBoot集成与API调用
StructBERT文本相似度模型Java开发实战:SpringBoot集成与API调用 你是不是也遇到过这样的场景?用户搜索“苹果手机”,你希望系统不仅能返回iPhone,还能识别出“苹果公司手机”、“Apple iPhone”这些同义查询。或者,在…...
英雄联盟智能工具League Akari:从效率提升到战术优化的全方位解决方案
英雄联盟智能工具League Akari:从效率提升到战术优化的全方位解决方案 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英…...
告别重复造轮子:用快马AI一键生成嵌入式Modbus协议栈提升效率
作为一名嵌入式开发者,我经常需要为各种项目实现Modbus通信协议。每次从零开始编写协议栈不仅耗时,还容易引入低级错误。最近尝试用InsCode(快马)平台生成基础框架,效率提升明显,分享下具体实践过程。 传统开发痛点分析 在STM32项…...
3分钟让Windows 11脱胎换骨:Win11Debloat全面系统优化指南
3分钟让Windows 11脱胎换骨:Win11Debloat全面系统优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...
Qwen3-TTS-12Hz-1.7B-Base应用场景:智能音箱多语种交互语音引擎升级
Qwen3-TTS-12Hz-1.7B-Base应用场景:智能音箱多语种交互语音引擎升级 重要提示:本文仅讨论技术实现方案,所有内容均基于公开技术文档和测试数据,不涉及任何政治敏感内容,完全符合内容安全规范。 1. 智能音箱语音交互的现…...
别再只盯着数据了!用Arduino+GP2Y1014AU传感器,手把手教你做个能“看见”空气的PM2.5监测仪
用Arduino打造智能PM2.5监测仪:从硬件连接到可视化交互 在空气质量日益受到关注的今天,拥有一个实时监测PM2.5浓度的设备不仅能提升生活品质,还能为健康保驾护航。不同于市面上千篇一律的商用监测仪,自己动手打造一个兼具实用性和…...
