Vue - 定义全局变量、全局函数

1、定义全局变量

设置一个专用的的全局变量模块文件,模块里面定义一些变量初始状态,用export default 暴露出去,在main.js里面使用Vue.prototype挂载到vue实例上面或者在其它地方需要使用时,引入该模块便可。

1.1 全局变量模块文件 Global.vue文件

<script>
const serverSrc='www.baidu.com';
const token='12345678';
const hasEnter=false;
const userSite="中国钓鱼岛";
  export default
  {
    userSite,//用户地址
    token,//用户token身份
    serverSrc,//服务器地址
    hasEnter,//用户登录状态
  }
</script>

1.2 使用方式1

在需要的地方引用进全局变量模块文件,然后通过文件里面的变量名字获取全局变量参数值。

在text1.vue组件中使用:

<template>
    <div>{{ token }}</div>
</template>

<script>
import global_ from '../../components/Global'//引用模块进来
export default {
name: 'text',
data () {
    return {
         token:global_.token,//将全局变量赋值到data里面,也可以直接使用global_.token
        }
    }
}
</script>
<style lang="scss" scoped>

</style>

1.3 使用方式2:

在程序入口的main.js文件里面,将上面那个Global.vue文件挂载到Vue.prototype。

 import global_ from './components/Global'//引用文件
 Vue.prototype.GLOBAL = global_//挂载到Vue实例上面

接着在整个项目中不需要再通过引用Global.vue模块文件,直接通过this就可以直接访问Global文件里面定义的全局变量。

text2.vue:

<template>
    <div>{{ token }}</div>
</template>

<script>
export default {
name: 'text',
data () {
    return {
         token:this.GLOBAL.token,//直接通过this访问全局变量。
        }
    }
}
</script>
<style lang="scss" scoped>
</style>

2、定义全局函数

原理

新建一个模块文件,然后在main.js里面通过Vue.prototype将函数挂载到Vue实例上面,通过this.函数名,来运行函数。

2.1  在main.js里面直接写函数

简单的函数可以直接在main.js里面直接写

Vue.prototype.changeData = function (){//changeData是函数名
  alert('执行成功');
}

组件中调用:

this.changeData();//直接通过this运行函数

2.2 写一个模块文件,挂载到main.js上面。

base.js文件,文件位置可以放在跟main.js同一级,方便引用

exports.install = function (Vue, options) {
   Vue.prototype.text1 = function (){//全局函数1
    alert('执行成功1');
    };
    Vue.prototype.text2 = function (){//全局函数2
    alert('执行成功2');
    };
};

main.js入口文件:

import base from './base'//引用
Vue.use(base);//将全局函数当做插件来进行注册

组件里面调用:

this.text1();
this.text2();
<think>好的,我现在需要帮助用户解决在Vue2中如何定义和使用全局变量全局函数的问题。用户之前已经询问过ES5和ES6的区别,现在转向Vue2的具体实现方法。我需要结合提供的引用内容,整理出几种常见的方法,并确保回答结构清晰,符合用户的要求。首先,用户提供的引用中提到了几种方法,比如通过Vue.prototype、使用插件形式、全局变量文件、Vuex等。我需要将这些方法分门别类,并给出具体的示例代码,确保用户能够理解每一步操作。同时,需要注意引用标识的正确添加,例如在提到每种方法时引用对应的来源。接下来,我需要考虑用户可能的实际应用场景。例如,全局变量可能用于存储用户token或配置信息,全局函数可能用于常用的工具函数或API请求。需要指出不同方法的适用场景,比如简单项目使用prototype或全局文件,而复杂状态管理使用Vuex。还需要注意用户提到的系统级指令,比如使用中文回答,生成相关问题,以及正确使用LaTeX格式。不过在这个问题中,可能涉及数学公式的地方不多,但如果有需要,要确保格式正确。此外,回答的结构要清晰,分点说明,每个方法都有步骤和代码示例。另外,用户可能对某些步骤有疑问,比如如何安装插件,或者在组件中如何访问全局变量函数。需要确保示例代码的准确性,并说明在模板和脚本中的使用方式。同时,要比较不同方法的优缺点,帮助用户选择最适合他们项目的方法。 最后,生成的相关问题需要与主题紧密相关,比如如何选择方法、维护注意事项、与Vue3的区别等。这些问题可以帮助用户进一步深入理解主题,解决可能遇到的后续问题。</think>### Vue 2 定义与使用全局变量全局函数的方法 --- #### 一、通过 **`Vue.prototype`** 挂载 **适用场景**:需要全局访问的变量或工具函数 **实现步骤**: 1. 在入口文件(如 `main.js`)中直接挂载到 Vue 原型链: ```javascript // 定义全局变量 Vue.prototype.$globalVar = '全局变量值'; // 定义全局函数 Vue.prototype.$globalFunc = function(param) { console.log('全局函数执行:', param); }; ``` 2. 在组件中通过 `this` 访问: ```vue <script> export default { mounted() { console.log(this.$globalVar); // 输出:全局变量值 this.$globalFunc('参数'); // 输出:全局函数执行: 参数 } } </script> ``` **优点**:简单直接,无需额外配置[^2][^4]。 --- #### 二、通过 **插件形式** 封装 **适用场景**:需要复用多个全局函数或变量 **实现步骤**: 1. 创建插件文件(如 `global.js`): ```javascript export default { install(Vue) { // 定义全局变量 Vue.prototype.$apiUrl = 'https://api.example.com'; // 定义全局函数 Vue.prototype.$formatDate = (date) => { return new Date(date).toLocaleString(); }; } } ``` 2. 在 `main.js` 中安装插件: ```javascript import GlobalPlugin from './global'; Vue.use(GlobalPlugin); ``` 3. 组件中使用: ```vue <script> export default { methods: { showDate() { console.log(this.$formatDate(new Date())); } } } </script> ``` **优点**:代码结构清晰,便于维护[^3][^5]。 --- #### 三、通过 **全局变量文件** 导出 **适用场景**:需要独立管理全局配置(如 API 地址) **实现步骤**: 1. 创建配置文件(如 `config.js`): ```javascript export const GLOBAL_CONFIG = { token: 'default_token', apiTimeout: 5000 }; ``` 2. 在组件中导入使用: ```vue <script> import { GLOBAL_CONFIG } from './config'; export default { data() { return { timeout: GLOBAL_CONFIG.apiTimeout // 直接引用 }; } } </script> ``` **优点**:独立于 Vue 实例,适合静态配置[^1][^2]。 --- #### 四、通过 **Vuex 状态管理** **适用场景**:需要响应式全局状态(如用户登录信息) **实现步骤**: 1. 定义 Vuex Store: ```javascript // store.js export default new Vuex.Store({ state: { userToken: 'initial_token' }, mutations: { setToken(state, token) { state.userToken = token; } } }); ``` 2. 在组件中通过 `$store` 访问: ```vue <template> <div>{{ $store.state.userToken }}</div> </template> <script> export default { methods: { updateToken() { this.$store.commit('setToken', 'new_token'); } } } </script> ``` **优点**:支持响应式更新,适合复杂应用[^2]。 --- ### 方法对比与选择建议 | 方法 | 适用场景 | 响应式支持 | 代码侵入性 | |--------------------|---------------------|----------|----------| | `Vue.prototype` | 简单工具函数/变量 | ❌ | 低 | | 插件形式 | 多个函数/变量封装 | ❌ | 中 | | 全局变量文件 | 静态配置项 | ❌ | 无 | | Vuex | 动态全局状态 | ✅ | 高 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值