在 UniApp 中,全局变量通常用于存储需要在整个应用程序中共享的数据或配置。虽然 UniApp 没有直接提供全局变量的概念,但你可以通过几种不同的方式来实现全局变量的功能。

以下是一些在 UniApp 中使用全局变量的方法:

1. 使用 App.vueglobalData

App.vue 中,你可以定义一个 globalData 对象来存储全局变量。这个对象可以在其他页面或组件中通过 getApp().globalData 来访问。

// App.vue
export default {
  globalData: {
    userInfo: null,
    token: ''
  },
  onLaunch: function () {
    // 初始化全局变量
    this.globalData.userInfo = { name: '张三', age: 30 };
  }
}

// 在其他页面或组件中访问
const app = getApp();
console.log(app.globalData.userInfo); // { name: '张三', age: 30 }

2. 使用 Vuex

如果你的项目是一个复杂的单页面应用,你可能需要使用 Vuex 来管理状态(即全局变量)。Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

3. 使用全局混入(Mixin)

虽然混入主要用于在多个组件之间共享逻辑,但你也可以在混入中定义全局变量。然而,这种方法并不推荐用于存储需要跨页面共享的数据,因为它主要用于在组件内部共享逻辑。

4. 使用 globalData 的替代方法:Vuex、全局 JS 文件或 Vue 的原型属性

  • Vuex:如前所述,Vuex 是一个状态管理库,非常适合在复杂应用中管理全局变量。
  • 全局 JS 文件:你可以创建一个全局的 JS 文件,并在其中导出你的全局变量。然后,你可以在其他文件中使用 import 语句来引入这些变量。但是,这种方法并不真正使变量“全局化”,因为你需要显式地导入它们。
  • Vue 的原型属性:你可以将全局变量添加到 Vue 的原型上,这样它们就可以在所有的 Vue 实例中访问。但是,这种方法可能会导致一些意外的副作用,因为它会修改 Vue 的全局原型。

5. 使用 uni.setStorageSyncuni.getStorageSync

如果你需要持久化存储全局变量(即使用户关闭并重新打开应用后仍然保留),你可以使用 UniApp 提供的本地存储 API。例如,你可以使用 uni.setStorageSync 来保存数据,并使用 uni.getStorageSync 来获取数据。但是请注意,这种方法主要用于存储少量数据,并且不适合存储大量或复杂的数据结构。

注意事项:

  • 尽量避免在全局范围内存储大量数据或复杂的对象,因为这可能会导致内存泄漏或性能问题。
  • 当全局变量的值发生变化时,确保通知所有依赖该变量的组件或页面进行更新。如果你使用 Vuex,你可以通过触发一个 mutation 来实现这一点。如果你使用 globalData,你可能需要手动触发一个事件或使用其他方法来通知其他部分的应用程序。