Uniapp微信小程序开发:全局变量的使用

简介

本文介绍了在Vue3中实现全局属性共享的两种方法。

第一种是通过app.config.globalProperties全局挂载属性,结合getCurrentInstance()在组合式API中获取组件实例来访问全局属性。

第二种推荐使用provide/inject方案,更符合Vue3设计理念,适合跨层级传递属性,通过app.provide()全局提供属性,再使用inject()注入使用。

两种方式都能有效实现全局状态共享,其中provide/inject方式更组件化且类型安全。

使用 app.config.globalProperties + getCurrentInstance

全局挂载(在入口文件中)

javascript 复制代码
import { createSSRApp } from 'vue';
export function createApp() {
  const app = createSSRApp(App);
  // 挂载全局属性
  app.config.globalProperties.$Hello = 'Hello vue3'; 
  return {
    app
  };
}

在组合式 API 中使用

javascript 复制代码
<script setup>
import { getCurrentInstance } from 'vue';

// 获取组件实例
const instance = getCurrentInstance();

// 访问全局属性
const hello1 = instance.appContext.config.globalProperties.$Hello;
//(proxy 是组件实例的代理,包含全局属性)
const hello2=instance.proxy.$Hello

console.log(hello1); // 输出:Hello vue3
console.log(hello2); // 输出:Hello vue3
</script>

使用 provide/inject(推荐)

如果属性需要在多个组件中共享,provide/inject 是更符合 Vue 3 设计理念的方案,尤其适合跨层级传递。

全局 provide(在入口文件中)

javascript 复制代码
import { createSSRApp } from 'vue';
export function createApp() {
  const app = createSSRApp(App);
  // 全局提供属性
  app.provide('helloKey', 'Hello vue3(from provide)'); 
  return {
    app
  };
}

在组合式 API 中 inject 使用

javascript 复制代码
<script setup>
import { inject } from 'vue';

// 注入全局提供的属性(通过 key 匹配)
const hello = inject('helloKey'); 

console.log(hello); // 输出:Hello vue3(from provide)
</script>
相关推荐
学习星球7 小时前
AI Agent 成本工程实战:从 OpenAI Codex 的 8 个“烧 Token“Bug 学起
人工智能·设计模式·微信小程序
律宏阔10 小时前
微信小程序使用 Orval + OpenAPI 自动生成接口:Axios 兼容踩坑记录
前端·微信小程序
律宏阔10 小时前
微信小程序集成 TDesign 完整记录:解决 NPM packages not found
前端·微信小程序
律宏阔10 小时前
微信小程序 ECharts 瘦身实战:分包异步化 + componentPlaceholder 避开主包 2MB 限制
前端·微信小程序
PedroQue9910 小时前
v2.7.1:修复 H5 端返回死循环闪烁问题
前端·uni-app
lhldsg12 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售
2601_949950631 天前
没有现成习题,试试AI再写出题
人工智能·小程序·刷题·练习·小程序推荐
andrsted1 天前
作业发布、课堂检测和错题讲评,用一个小程序完成
学习·微信小程序·小程序·学习方法
汤姆yu1 天前
基于微信小程序的家电维修预约系统
微信小程序·小程序·家电维修