Vue.js项目中全面解析定义全局变量的常用方法与技巧

简介: Vue.js项目中全面解析定义全局变量的常用方法与技巧

在Vue项目中我们需要使用许多的变量来维护数据的流向和状态,这些变量可以是本地变量、组件变量、父子组件变量等,但这些变量都是有局限性的。在一些场景中,可能需要在多个组件中共享某个变量,此时全局变量就派上了用场。


定义全局变量的方法

1、使用Vue.prototype定义全局变量

通过在 vue 的原型上定义属性,可以在所有组件中访问该属性。

  • 在main.js定义全局变量
// main.js
Vue.prototype.baseUrl = "https://www.example.com/api"
  • 在页面中使用
<template>
  <div>
    {{baseUrl}}
  </div>
</template>
  • 在方法中使用
<script>
created() {
    console.log(this.baseUrl)
},
</script>
2、使用env文件定义全局变量

Vue项目的根目录中创建一个.env文件,用于存储一些全局变量。

  • 在.env文件中定义
VUE_APP_BASE_URL = "https://www.example.com/api"
  • 在方法中使用
<script>
created() {
    const baseUrl = process.env.VUE_APP_BASE_URL
    console.log(baseUrl)
},
</script>
3、使用vuex定义全局变量

vuex 是 vue 的官方状态管理库,可以用于管理全局状态。

  • 定义全局变量
//store/index.js
export default new Vuex.Store({
  state: {
    baseUrl: "https://www.example.com/api"
  },
})
  • 在页面中使用
<template>
  <div>
    {{this.$store.state.baseUrl}}
  </div>
</template>
  • 在方法中使用
<script>
created() {
    const baseUrl = this.$store.state.baseUrl
    console.log(baseUrl)
},
</script>
4、使用Vue.mixin定义全局变量

通过混入(mixin)的方式,可以将一些公共的属性或方法混入到所有组件中。

  • 创建一个全局变量的js文件。示例文件路径为:./utils/globalVar.js
//globalVar.js
export default {
    data() {
        return {
            baseUrl: "https://www.example.com/api"
        };
    }
}
  • 在项目的 main.js 文件中引入该 globalVar.js 文件并使用 Vue.mixin() 方法将之全局混入:
//main.js
import globalVar from './utils/globalVar.js'
Vue.mixin(globalVar)
  • 在页面中使用
<template>
  <div>
    {{baseUrl}}
  </div>
</template>
  • 在方法中使用
<script>
created() {
    console.log(this.baseUrl)
},
</script>
5、使用localStorage 或 sessionStorage定义全局变量

通过将变量存储在 localStorage 或 sessionStorage 中,可以在所有组件中共享该变量。

  • 在main.js中定义
localStorage.setItem("baseUrl", "https://www.example.com/api")
  • 在方法中使用
<script>
created() {
    const baseUrl = localStorage.getItem("baseUrl")
    console.log(baseUrl)
},
</script>
6、vue3中配置globalProperties

vue3提供了专门公共数据配置的方式: globalProperties、getCurrentInstance

  • 在main.js中定义
//main.js
import { createApp } from 'vue'
import App from './App.vue'
const app=createApp(App)
app.config.globalProperties.baseUrl = "https://www.example.com/api"
app.mount('#app')
  • 在页面中使用
<template>
  <div>
    {{baseUrl}}
  </div>
</template>
  • 在方法中使用
<script setup>
import { getCurrentInstance } from "vue"
const { proxy } = getCurrentInstance()
console.log(proxy.baseUrl)
</script>

7、自动配置打包版本日期

在前端开发过程中,总会遇到前端包部署之后,不知道是否成功,是否替换了原来的包,看不出来事什么时候的包。我们可以在控制台输出一个打包的日期。这样就很容易区分前端包的版本日期了。


7.1、vue3在vite.config.js中定义环境变量。获取当前打包日期时间。
  • 在vite.config.js配置
//vite.config.js
process.env.VITE_APP_VERSION = JSON.stringify(new Date().toLocaleString())
  • 在App.vue中打印
<script setup>
    console.log(import.meta.env.VITE_APP_VERSION)
</script>
7.2、vue2在vue.config.js中定义环境变量。获取当前打包日期时间。
  • 在vue.config.js配置
//vue.config.js
const webpack = require('webpack');
module.exports = {
  configureWebpack: {
    plugins: [
     new webpack.DefinePlugin({
       "process.env.VERSION": JSON.stringify(new Date().toLocaleString())
     })
   ]
  }
}
  • 在App.vue中打印
<script>
created() {
    console.log(process.env.VERSION)
},
</script>
目录
相关文章
|
5月前
|
JavaScript 前端开发 IDE
TypeScript vs. JavaScript:技术对比与核心差异解析
TypeScript 作为 JavaScript 的超集,通过静态类型系统、编译时错误检测和强大的工具链支持,显著提升代码质量与可维护性,尤其适用于中大型项目和团队协作。相较之下,JavaScript 更灵活,适合快速原型开发。本文从类型系统、错误检测、工具支持等多维度对比两者差异,并提供技术选型建议,助力开发者合理选择。
1083 1
|
5月前
|
JavaScript 前端开发 开发者
Nest.js控制器深度解析:路由与请求处理的高级特性
以上就是对 NestJS 控制层高级特性深度解析:从基本概念到异步支持再到更复杂场景下拦截其与管道等功能性组件运用都有所涉及,希望能够帮助开发者更好地理解和运用 NestJS 进行高效开发工作。
410 15
|
5月前
|
存储 JavaScript 前端开发
JavaScript 语法全面解析
JavaScript 语法体系丰富且不断更新,从基础的变量声明、数据类型,到复杂的函数、对象、异步语法,每个知识点都需要开发者深入理解并灵活运用。本文梳理的 JS 语法核心内容,可为开发者提供系统的学习框架,后续还需通过大量实践(如编写交互组件、实现业务逻辑)巩固知识,逐步提升 JS 编程能力,应对前端开发中的各类挑战。
|
11月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
598 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
8月前
|
机器学习/深度学习 JavaScript 前端开发
JS进阶教程:递归函数原理与篇例解析
通过对这些代码示例的学习,我们已经了解了递归的原理以及递归在JS中的应用方法。递归虽然有着理论升华,但弄清它的核心思想并不难。举个随手可见的例子,火影鸣人做的影分身,你看到的都是同一个鸣人,但他们的行为却能在全局产生影响,这不就是递归吗?雾里看花,透过其间你或许已经深入了递归的魅力之中。
345 19
|
8月前
|
网络协议 安全 区块链
DNS+:互联网的下一个十年,为什么域名系统正在重新定义数字生态? ——解读《“DNS+”发展白皮书(2023)》
DNS+标志着域名系统从基础寻址工具向融合技术、业态与治理的数字生态中枢转变。通过与IPv6、AI和区块链结合,DNS实现了智能调度、加密传输等新功能,支持工业互联网、Web3及万物互联场景。当前,中国IPv6用户达7.6亿,全球DNSSEC支持率三年增长80%,展现了其快速发展态势。然而,DNS+仍面临安全威胁、技术普惠瓶颈及生态协同挑战。未来,需推动零信任DNS模型、加强威胁情报共享,并加速标准制定,以筑牢数字时代网络根基,实现更安全、高效的数字生态建设。
572 4
|
9月前
|
JSON 前端开发 Serverless
Mock.js 语法结构全解析
Mock.js 的语法规范介绍,从数据模板定义规范和数据占位符定义规范俩部分介绍, 让你更好的使用 Mock.js 来模拟数据并提高开发效率。
|
8月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
414 0
|
11月前
|
供应链 项目管理 容器
深入探索 BPMN、CMMN 和 DMN:从定义到应用的全方位解析
在当今快速变化的商业环境中,对象管理组织(OMG)推出了三种强大的建模标准:BPMN(业务流程模型和符号)、CMMN(案例管理模型和符号)和DMN(决策模型和符号)。它们分别适用于结构化流程管理、动态案例处理和规则驱动的决策制定,并能相互协作,覆盖更广泛的业务场景。BPMN通过直观符号绘制固定流程;CMMN灵活管理不确定的案例;DMN以表格形式定义清晰的决策规则。三者结合可优化企业效率与灵活性。 [阅读更多](https://example.com/blog)
深入探索 BPMN、CMMN 和 DMN:从定义到应用的全方位解析
|
11月前
|
数据采集 前端开发 JavaScript
金融数据分析:解析JavaScript渲染的隐藏表格
本文详解了如何使用Python与Selenium结合代理IP技术,从金融网站(如东方财富网)抓取由JavaScript渲染的隐藏表格数据。内容涵盖环境搭建、代理配置、模拟用户行为、数据解析与分析等关键步骤。通过设置Cookie和User-Agent,突破反爬机制;借助Selenium等待页面渲染,精准定位动态数据。同时,提供了常见错误解决方案及延伸练习,帮助读者掌握金融数据采集的核心技能,为投资决策提供支持。注意规避动态加载、代理验证及元素定位等潜在陷阱,确保数据抓取高效稳定。
357 17

推荐镜像

更多
  • DNS