vue2 与 vue3 的全局属性使用方法区别
1、globalProperties getcurrentinstace vue3 中已经移除对外暴露 getcurrentinstace,建议使用下面两种
2、provide | inject
3、mitt 事件总线程
// main.js
import Vue from 'vue'
import App from './App.vue'
Vue.prototype.$message = '测试'
Vue.mount('#app',App')
// 使用
methods:{
test(){
// 直接通过 this.$message 即可实现调用
console.log(this.$message)
}
}
// 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')
建议使用在main.ts 中
通过全局依赖,如:app.provide('message', '测试') 这样即可在组件中通过 inject 获取到全局属性;
<script setup>
const message = inject('message')
console.log(message) // 测试
</script>
不建议使用该属性发现在 vue3 的api文档中已经无法搜索到,已被隐藏,不建议使用。
app.config.globalProperties定义的全局变量不支持双向绑定,只是声明了一个全局的变量
// main.ts
app.config.globalProperties.$message = '测试'
使用时
<script setup>
import { getcurrentInstance } from 'vue'
getcurrentInstance.appContext.config.globalProperties.$message // 测试
</script>
不建议使用 yarn add mitt
// 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()情况所有
<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() 依赖注入的方法进行全局属性方法挂载