You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue 3组件中使用原生JavaScript全局变量?

问题解决方法

报错原因

Vue模板的作用域绑定当前组件实例,你导入的personData是模块级全局变量,并没有挂载到组件实例上,所以模板无法直接访问它,导致“未定义”的报错。

解决方案(满足全局变量需求)

方案1:组件内映射到计算属性

这种方式适合仅在当前组件使用全局变量的场景,修改全局变量的属性会同步到原对象:

<template>
  <div> Hello {{ personData.name }} {{ personData.last }} </div>
  <button @click="signOut"> Sign Out </button>
</template>

<script>
import { personData } from '<你的实际文件路径>'

export default {
  computed: {
    // 将全局变量映射到组件实例的计算属性
    personData() {
      return personData
    }
  },
  methods: {
    signOut() {
      personData.signed_in = false;
    }
  }
}
</script>

方案2:挂载到Vue全局属性(全组件通用)

如果需要所有组件都能直接使用这个全局变量,无需每次导入,可以挂载到Vue全局属性:

Vue 2 版本

在main.js中配置:

import Vue from 'vue'
import { personData } from '<你的实际文件路径>'

// 挂载到Vue原型,所有组件可通过this.$personData访问
Vue.prototype.$personData = personData

组件中使用:

<template>
  <div> Hello {{ $personData.name }} {{ $personData.last }} </div>
  <button @click="signOut"> Sign Out </button>
</template>

<script>
export default {
  methods: {
    signOut() {
      this.$personData.signed_in = false;
    }
  }
}
</script>

Vue 3 版本

在main.js中配置:

import { createApp } from 'vue'
import App from './App.vue'
import { personData } from '<你的实际文件路径>'

const app = createApp(App)
// 挂载到全局属性,所有组件模板可直接用$personData访问
app.config.globalProperties.$personData = personData
app.mount('#app')

组件(<script setup>语法)中使用:

<template>
  <div> Hello {{ $personData.name }} {{ $personData.last }} </div>
  <button @click="signOut"> Sign Out </button>
</template>

<script setup>
import { getCurrentInstance } from 'vue'

// 获取全局属性
const { appContext } = getCurrentInstance()
const personData = appContext.config.globalProperties.$personData

const signOut = () => {
  personData.signed_in = false
}
</script>

内容的提问来源于stack exchange,提问作者ITDW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:01:08