vue3环境下getApp无法获取正确的信息

vue3环境下getApp无法获取正确的信息

操作步骤:

在首页onload里面打出app内容

console.log(JSON.stringify(app.globalData));

预期结果:

{
  "server_url": {},
  "tabbar": true,
  "searchUser": ...
}

用vue2是有内容的

实际结果:

{}

bug描述:

const app=getApp();

获取app信息报错,改为

const app=getApp({allowDefault: true});

修改之后获取的globalData是空的:{"globalData":{}}
在vue2时候都正常,升级vue3后出现的这个问题

项目信息

项目信息 描述
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 15.3.1 (24D70)
HBuilderX类型 正式
HBuilderX版本 4.56
手机系统 Android
手机系统版本 Android 15
手机厂商 小米
手机机型 redmi k80
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

2 回复

这个是不是在 github 上发过?提供个复现工程吧。我测试 安卓、ios 在 page onLoad 里获取正常
<template>
<view>123</view>
</template>

<script> export default{ onLoad() { const app = getApp() console.log(444,app.globalData) } } </script>

这是一个Vue3环境下getApp()获取globalData为空对象的常见问题。主要原因是在Vue3中,应用实例的创建时机与Vue2不同。

解决方案如下:

  1. 确保在App.vue中正确初始化globalData:
export default {
  globalData: {
    server_url: {},
    tabbar: true,
    searchUser: ...
  }
}
  1. 在页面组件中,使用组合式API写法:
import { getCurrentInstance } from 'vue'
import { onLoad } from '@dcloudio/uni-app'

onLoad(() => {
  const app = getCurrentInstance()?.appContext.config.globalProperties || getApp({allowDefault: true})
  console.log(app.globalData)
})
  1. 或者改用uni-app提供的globalData替代方案:
uni.$app = {
  globalData: {
    // 你的全局数据
  }
}
回到顶部