vue3.x如何注册全局组件/方法(替代vue2.x的Vue.prototype)

简介: vue3.x如何注册全局组件/方法(替代vue2.x的Vue.prototype)

vue3.x是无法通过Vue.prototype来注册全局组件/方法的,因此需要另辟蹊径。


vue3.x注册全局组件/方法主要有以下两个方式:


provide / inject (推荐)


main.js中:通过provide将组件或者方法、变量挂载在全局

import { createApp } from'vue';
importAppfrom'./App.vue';
importrouterfrom'./router';
importstorefrom'./store';
constapp=createApp(App);
app.use(store);
app.use(router);
// 挂载全局方法constglobalFunc= () => {
console.log('要挂载在全局的方法');
}
// 将globalFunc方法挂载在全局app.provide('globalFunc', globalFunc);
app.mount('#app');
// 把vue实例挂载在window.vm,方便使用vue的实例window.vm=app;

组件中:通过inject获取全局方法并调用

<template><div>组件中通过inject获取全局方法并调用</div></template><scriptlang="ts">import { defineComponent, onMounted, inject } from'vue';
exportdefaultdefineComponent({
name: 'JobDetail',
// 注册组件components: {
Header,
  },
setup() {
onMounted(() => {
testFunc();
    });
consttestFunc= (): void=> {
constglobalFunc: any=inject('globalFunc'); // 通过inject获取挂载在全局的globalFunc方法globalFunc();
    };
return {
testFunc,
    };
  },
});
</script>

app.config.globalProperties(不推荐)

main.js中:通过app.config.globalProperties将组件或者方法、变量挂载在全局

import { createApp } from'vue';
importAppfrom'./App.vue';
importrouterfrom'./router';
importstorefrom'./store';
constapp=createApp(App);
app.use(store);
app.use(router);
// 挂载全局方法constglobalFunc= () => {
console.log('要挂载在全局的方法');
}
// 将globalFunc方法挂载在全局app.config.globalProperties.globalFunc=globalFunc;
app.mount('#app');
// 把vue实例挂载在window.vm,方便使用vue的实例window.vm=app;

组件中:通过getCurrentInstance().appContext.config.globalProperties获取全局方法并调用

<template><div>组件中通过inject获取全局方法并调用</div></template><scriptlang="ts">import { defineComponent, onMounted, getCurrentInstance } from'vue';
exportdefaultdefineComponent({
name: 'JobDetail',
// 注册组件components: {
Header,
  },
setup() {
onMounted(() => {
testFunc();
    });
consttestFunc= (): void=> {
constinternalInstance: any=getCurrentInstance();
console.log(internalInstance.appContext.config.globalProperties);
// 通过getCurrentInstance().appContext.config.globalProperties获取全局方法并调用internalInstance.appContext.config.globalProperties.globalFunc();
    };
return {
testFunc,
    };
  },
});
</script>

image.png

需要注意的是:

vue3官网提示

getCurrentInstance only works during setup or Lifecycle Hooks

When using outside of setup or Lifecycle Hooks, please call getCurrentInstance() on setup and use the instance instead.

image.png

文章参考:

https://www.5axxw.com/questions/content/nsd3mq

https://www.cnblogs.com/xiaoyan2017/p/14221729.html

https://www.freesion.com/article/40251353944/

https://blog.csdn.net/weixin_43273755/article/details/115311398

————————————————

版权声明:本文为CSDN博主「Boale_H」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Boale_H/article/details/118857338

目录
相关文章
|
20天前
|
JavaScript 数据库
ant design vue日期组件怎么清空 取消默认当天日期
ant design vue日期组件怎么清空 取消默认当天日期
|
20天前
|
JavaScript C++
vue高亮显示组件--转载
vue高亮显示组件--转载
24 0
|
20天前
|
JavaScript 前端开发 开发者
Vue的事件处理机制提供了灵活且强大的方式来响应用户的操作和组件间的通信
【5月更文挑战第16天】Vue事件处理包括v-on(@)指令用于绑定事件监听器,如示例中的按钮点击事件。事件修饰符如.stop和.prevent简化逻辑,如阻止表单默认提交。自定义事件允许组件间通信,子组件通过$emit触发事件,父组件用v-on监听并响应。理解这些机制有助于掌握Vue应用的事件控制。
32 4
|
1天前
|
JavaScript
vue组件中data为什么必须是一个函数?
vue组件中data为什么必须是一个函数?
7 1
|
20天前
|
JavaScript 前端开发 UED
Vue class和style绑定:动态美化你的组件
Vue class和style绑定:动态美化你的组件
|
20天前
|
JavaScript
vue封装面包屑组件
vue封装面包屑组件
21 0
|
20天前
|
JavaScript 前端开发 API
深入理解vue组件生命周期,你一定要看到最后,最后有深入探讨
深入理解vue组件生命周期,你一定要看到最后,最后有深入探讨
|
20天前
|
JavaScript Go
VUE3+vite项目中动态引入组件和异步组件
VUE3+vite项目中动态引入组件和异步组件
|
20天前
|
缓存 算法 JavaScript
vue中组件保活<keep-alive>的使用
vue中组件保活<keep-alive>的使用
|
20天前
|
JavaScript 前端开发 UED
教你用vue自定义指令做一个组件的遮罩层loading效果
教你用vue自定义指令做一个组件的遮罩层loading效果