有人知道如何在 Vue 3 中添加全局变量吗?
在 Vue 2 中,我们在 main.js 文件中使用它:
Vue.prototype.$myGlobalVariable = globalVariable
原文由 Adri HM 发布,翻译遵循 CC BY-SA 4.0 许可协议
有人知道如何在 Vue 3 中添加全局变量吗?
在 Vue 2 中,我们在 main.js 文件中使用它:
Vue.prototype.$myGlobalVariable = globalVariable
原文由 Adri HM 发布,翻译遵循 CC BY-SA 4.0 许可协议
我建议使用 provide/inject 方法如下:
在 main.js 中:
import {createApp} from 'vue'
let app=createApp({
provide:{
globalVariable:123
}
}).$mount('#app')
在某些子组件或孙子组件中:
export default{
name:'some-compo',
inject:['globalVariable'],
//then access this.globalVariable as property in you component
...
}
对于组合 api 和脚本设置:
import { inject } from 'vue'
let globalVar=inject('globalVariable')
原文由 Boussadjra Brahim 发布,翻译遵循 CC BY-SA 4.0 许可协议
11 回答1.3k 阅读
4 回答576 阅读✓ 已解决
3 回答855 阅读
1 回答851 阅读✓ 已解决
1 回答1.1k 阅读
2 回答773 阅读
2 回答617 阅读
最直接的替换是
app.config.globalProperties。看:https://vuejs.org/api/application.html#app-config-globalproperties
所以:
变成:
这仅限于特定应用程序,而不是像
Vue.prototype那样是全局的。这是设计使然,所有“全局”配置选项现在都适用于应用程序。相关的 RFC 在这里:
https://github.com/vuejs/rfcs/blob/master/active-rfcs/0009-global-api-change.md
添加到
globalProperties的属性将通过应用程序中所有组件的组件实例可用。因此,如果您使用 Options API,您将能够使用this.$myGlobalVariableVue.prototype。它们也可以在没有this.的模板中使用,例如{{ $myGlobalVariable }}。如果您使用的是 Composition API,那么您仍然可以在模板中使用这些属性,但您将无法访问
setup中的组件实例,因此这些属性不会是那里可以访问。虽然涉及
getCurrentInstance()的黑客可用于访问globalProperties内的setup,但这些黑客涉及使用未记录的 API,因此不是推荐的方法。相反,应用程序级别的
provide/inject(也在该 RFC 中讨论过)可以用作Vue.prototype的替代方案:在后代组件中,可以使用
inject访问它。例如<script setup>:或者使用明确的
setup函数:或者使用选项 API:
文档: https ://vuejs.org/api/application.html#app-provide
这里的想法是组件可以显式声明属性,而不是通过魔法继承它。这样可以避免名称冲突等问题,因此无需使用
$前缀。它还可以帮助更清楚地了解财产的确切来源。inject函数通常被包装在一个组合中。例如,Vue Router 暴露的useRoute可组合只是inject的包装。In addition to
globalPropertiesandprovide/inject, there are various other techniques that might be used to solve the same problems asVue.prototype.例如,ES 模块、存储,甚至是全局 mixin。这些不一定是对此处发布的特定问题的直接答案,但我已经更详细地描述了各种方法:https://skirtles-code.github.io/vue-examples/patterns/global-properties.html
您喜欢哪种方法取决于您的情况。