vue3 + ts:开发插件 / Plugins / 注册全局实例 / 在 template 与 setup 中使用 / provide、inject

ops/2024/11/26 6:31:01/

一、理解插件 / Plugins

https://cn.vuejs.org/guide/reusability/plugins.html

理解一

一个插件通常是一个对象,包含一个 install 方法。install 方法在插件注册时被调用,用于将插件的功能和特性添加到 Vue 应用实例中。

理解二

插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。

一个插件可以是拥有install()方法的对象,也可以直接是一个安装函数本身,安装函数会接收到安装它的应用实例和传递给app.use()的额外选项作为参数。

二、插件发挥作用的常见场景

2.1、插件没有严格定义的使用范围,但是插件发挥作用的常见场景主要包括以下几种

2.2、通过 app.component() 和 app.directive() 注册一到多个全局组件或自定义指令。

2.3、通过 app.provide() 使一个资源可被注入进整个应用。

2.4、向 app.config.globalProperties 中添加一些全局实例属性或方法

一个可能上述三种都包含了的功能库 (例如 vue-router)。

三、实例

3.1、MyPlugin.ts

// MyPlugin.ts
import { App } from 'vue';
import HelloWorld from '@v3/components/HelloWorld.vue'
export default {install(app: App, options) {// 插件逻辑console.log('MyPlugin is installed with options:', options);// 你可以在这里添加全局方法、指令、混入等// 示例:添加全局方法app.config.globalProperties.$myMethod = () => {return 'This is a method from MyPlugin!'console.log('This is a method from MyPlugin!');};// provide inject 方法app.provide('myMethodP', function() {console.log('This is a global method');})// 示例:添加全局指令app.directive('my-directive', {mounted(el, binding) {el.style.color = binding.value;}});// 示例:添加全局混入app.mixin({created() {console.log('This is a mixin from MyPlugin!');}});// 示例:添加全局组件-未生效-待查明// app.component('MyComponent', {//   template: '<div>This is a component from MyPlugin!</div>'// });// 生效app.component('MyComponent', HelloWorld);}
};

3.2、main.ts

import mi18n from '@v3/plugins/MyPlugin'
...
app.use(mi18n)

四、全局方法

4.1、template 使用

<template><div class="container"><div>{{ $myMethod() }}</div></div>
</template>

4.2、组合式 API / setup 内使用

<script setup lang="ts">
import { getCurrentInstance } from 'vue'
let internalInstance = getCurrentInstance()
let myMethod = internalInstance && internalInstance.appContext.config.globalProperties.$myMethod
</script>

4.3、 选项式 API

<script>
export default {methods: {usePluginMethod() {// 调用插件中的全局方法this.$myMethod();}}
};
</script>

五、全局指令

<template><div><h1 v-my-directive="'red'">Hello, Snow!</h1><MyComponent /><button @click="usePluginMethod">Use Plugin Method</button></div>
</template>

六、全局混入

全局混入会自动应用到所有组件中,因此在 <script setup> 组件中,你无需显式地引入或使用它们。混入的生命周期钩子和方法将自动与组件的生命周期钩子和方法合并

七、全局组件

<template><MyComponent />
</template>

八、provide、inject

<script setup lang="ts">
import { inject } from 'vue'
const myMethodP = inject('myMethodP')
console.log('54', myMethodP)
</script>

九、欢迎交流指正

十、参考链接

vue3-vite-ts:编写Rollup插件并使用 / 优化构建过程_vite 中 rollup-plugin-dts-CSDN博客

04-Vue3插件介绍讲解_哔哩哔哩_bilibili

https://cn.vuejs.org/api/application.html#app-config-globalproperties

Vue3

vue3注册添加全局实例属性的方法,如何在setup函数中调用-阿里云开发者社区


http://www.ppmy.cn/ops/136768.html

相关文章

/proc/sys/net/ipv4/ip_forward 被关闭问题排查

问题描述 之前搭了一个mongodb, 在docker中部署mongodb&#xff0c;做了端口转发&#xff0c;但是发现mongodb总是失联&#xff0c;每隔一段时间就会断开&#xff0c;但是容器还存在&#xff0c;最后定位到是端口转发被关闭了:/proc/sys/net/ipv4/ip_forward docker的端口转发…

二叉树的深度搜索专题一>计算布尔二叉树的值

题目&#xff1a; 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; public boolean evaluateTree(TreeNode root) {if(root.left null && root.right null) return root.val 1 ? true : false;boolean leftTree evaluateTree(root.left);boolean…

python excel接口自动化测试框架!

今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件&#xff0c;得到测试信息&#xff0c;然后通过封装的requests方法&#xff0c;用unittest进行测试。 其中&#xff0c;接口关联的参数通过正则进…

内存不足引发C++程序闪退崩溃问题的分析与总结

目录 1、内存不足一般出现在32位程序中 2、内存不足时会导致malloc或new申请内存失败 2.1、malloc申请内存失败&#xff0c;返回NULL 2.2、new申请内存失败&#xff0c;抛出异常 3、内存不足项目实战案例中相关细节与要点说明 3.1、内存不足导致malloc申请内存失败&#…

Android12 的 Vold梳理

1.代码位置 system/vold/ 路径下,查看bp文件&#xff0c;发现是编译system/vold/main.cpp编译生成可执行文件vold 2.app侧调用代码流程 2.1 整体框架 #mermaid-svg-lqO8phN62rKNW407 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#…

灰色预测GM(1,1)-Matlab实现

灰色预测是通过少量的&#xff0c;不完全的信息&#xff0c;建立数学模型并给出预测的一种预测方法 是处理小样本预测问题的有效工具 适用条件 (1)数据是以年份度量的非负数据&#xff08;如果是月份或者季度数据一般要用时间序列模型&#xff09; (2)数据能通过准指数规律的…

【C语言】传值调用与传址调用:深度解析与实现

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;什么是传值调用和传址调用&#xff1f;1. 传值调用&#xff08;Call by Value&#xff09;2. 传址调用&#xff08;Call by Reference&#xff09; &#x1f4af;传值调…

Java基础-Java中的常用类(上)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 String类 创建字符串 字符串长度 连接字符串 创建格式化字符串 String 方法 System类 常用方法 方…