欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > Vue中app.config.globalPropertiesVue.prototype和getCurrentInstance的使用

Vue中app.config.globalPropertiesVue.prototype和getCurrentInstance的使用

2024/10/25 0:23:17 来源:https://blog.csdn.net/JackieDYH/article/details/143112889  浏览:    关键词:Vue中app.config.globalPropertiesVue.prototype和getCurrentInstance的使用

 app.config.globalProperties和Vue.prototype

在Vue 3中,我们可以使用 app.config.globalProperties 来定义全局的属性和方法。这个属性和Vue 2中的 Vue.prototype 类似,但是在某些方面有所不同。

以下是Vue3中 app.config.globalProperties 和Vue2中的 Vue.prototype 的对比:

1、异步行为不同

Vue 3中是异步创建组件实例并挂载DOM,所以在 app.config.globalProperties 定义的方法中使用异步方法会更加安全。但是在Vue 2中使用 Vue.prototype 来定义方法则会有一些异步行为的问题。

2、组件实例不同

在Vue 3中,组件实例是通过 getCurrentInstance() 来获取的,所以在 app.config.globalProperties 中定义的方法能够访问组件实例。而在Vue 2中,Vue.prototype 定义的方法不能访问组件实例。

3、访问限制不同

在Vue 3中,我们可以通过 app.config.globalProperties 定义一些全局变量和方法,但是这些变量和方法不会被组件模板中的 v-bind 和 v-on 绑定到 this 上。而在Vue 2中,Vue.prototype 定义的变量和方法会被绑定到 this 上。

总体来说,Vue 3中的 app.config.globalProperties 和Vue 2中的 Vue.prototype 都是为了提供全局变量和方法的,但是在某些方面有所不同。Vue 3中的 app.config.globalProperties 更加安全和灵活,能够更好地满足开发者的需求。

案例 -getCurrentInstance注意⚠️

vue2
定义
Vue.prototype.$utils = utils;
Vue.prototype.$bus = new Vue();使用
this.$utils
this.$busvue3
定义
app.config.globalProperties.$utils = utils;
app.config.globalProperties.$axios = getRequest;使用
import {getCurrentInstance} from "vue";
const { proxy } = getCurrentInstance();
proxy.$utils
proxy.$axios

app.config.globalProperties 可以在 Vue 3 中设置全局变量或函数,使其在整个应用程序中都可以访问。

以下是如何使用 app.config.globalProperties

main.js 中导入并创建 Vue 应用程序:

import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)// 设置全局变量
app.config.globalProperties.$apiUrl = 'https://example.com/api'// 设置全局函数
app.config.globalProperties.$formatDate = (date) => {// 日期格式化逻辑
}// 挂载应用程序
app.mount('#app')

在组件中使用全局变量和函数:

<template><div><p>API URL: {{ $apiUrl }}</p><p>Formatted date: {{ $formatDate(new Date()) }}</p></div>
</template>

注意:如果使用 TypeScript,还需要在 shims-vue.d.ts 文件中声明全局变量和函数的类型,以便 IDE 可以正确识别它们。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com