vue3 第二十三节(全局属性方法应用)

vue2 与 vue3 的全局属性使用方法区别 1、globalProperties getcurrentinstace vue3 中已经移除对外暴露 getcurrentinstace,建议使用下面两种 2、provide | inject 3、mitt 事件总线程

1、vue2 通过 prototype 实例上挂载属性/方法,用于全局调用

javascript 复制代码
// main.js
import Vue from 'vue'
import App from './App.vue'
Vue.prototype.$message = '测试'
Vue.mount('#app',App')
javascript 复制代码
// 使用
methods:{
  test(){
    // 直接通过 this.$message 即可实现调用
    console.log(this.$message)
  }
}

2、vue3 中建议通过 provide | inject 挂载全局属性/方法

javascript 复制代码
// main.js

import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)
app.config.globalProperties.$message = '测试' // 这种方案vue3中已不建议使用
app.provide('message', '测试')
app.mount('#app')

3.1、通过 provide | inject 挂载全局属性/方法 建议使用

main.ts 中 通过全局依赖,如:app.provide('message', '测试') 这样即可在组件中通过 inject 获取到全局属性;

javascript 复制代码
<script setup>
const message = inject('message')
console.log(message) // 测试
</script>

更多关于provide() | inject() 的应用请查看组件之间通讯

3.2、通过globalProperties 挂载全局属性/方法 不建议使用

该属性发现在 vue3 的api文档中已经无法搜索到,已被隐藏,不建议使用app.config.globalProperties定义的全局变量不支持双向绑定,只是声明了一个全局的变量

javascript 复制代码
// main.ts
app.config.globalProperties.$message = '测试'
javascript 复制代码
使用时
<script setup>
import { getcurrentInstance } from 'vue'
getcurrentInstance.appContext.config.globalProperties.$message // 测试
</script>

3.3、事件总线 mitt() 不建议使用

javascript 复制代码
 yarn add mitt
javascript 复制代码
 // main.ts
 import mitt from "mitt"
 const Mitt = mitt()
 // 声明
 declare module 'vue'{
  export interface ComponentCustomProperties{
    $Bus: typeof Mitt
  }
}
 app.config.globalProperties.$Bus = Mitt

使用时候 使用emit()派发事件 on()接受事件 off()事件移除 clear()情况所有

javascript 复制代码
<script setup>
import {getCurrentInstance} from "vue"
const instance = getCurrentInstance().appContext.config.globalProperties
// 派发事件
instance.proxy.$Bus.emit("on-changeParams","修改参数")
// 监听事件

instance.proxy.$Bus.on("on-changeParams",(params) => {
  console.log('--params-')
})
// 关闭事件
instance.proxy.$Bus.off("on-changeParams",(params) => {
  console.log('--params-')
})
//清空所有监听
instance.all.clear();
</script>

vue3 中 3.3版本以上 组合式 API 中建议 使用 provide() | inject() 依赖注入的方法进行全局属性方法挂载

相关推荐
五点六六六2 分钟前
前端常见的性能指标采集
前端·性能优化·架构
吳所畏惧5 分钟前
NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决
前端·windows·阿里云·npm·node.js·batch命令
陈随易20 分钟前
AI新技术VideoTutor,幼儿园操作难度,一句话生成讲解视频
前端·后端·程序员
Pedantic23 分钟前
SwiftUI 按钮Button:完整教程
前端
前端拿破轮25 分钟前
2025年了,你还不知道怎么在vscode中直接调试TypeScript文件?
前端·typescript·visual studio code
代码的余温27 分钟前
DOM元素添加技巧全解析
前端
JSON_L30 分钟前
Vue 电影导航组件
前端·javascript·vue.js
计算机编程果茶熊31 分钟前
毕设选题难、不会写代码、答辩紧张?校园失物招领系统从需求到实现全流程指南|计算机毕业设计
java·vue.js
用户214118326360238 分钟前
01-开源版COZE-字节 Coze Studio 重磅开源!保姆级本地安装教程,手把手带你体验
前端
奇舞精选1 小时前
从零开始实现Vue3+WebAssembly万级数据表格开发流程
vue.js·webassembly