vue3从精通到入门23:定义全局变量

在vue2中,我们知道vue2.x是使用Vue.prototype.$xxxx=xxx来定义全局变量, 比如定义一个全局的工具函数。

// 定义
...
Vue.prototype.$utils=utils;// 使用
this.$utils()
...

在vue3中我们无法使用this,提供了globalProperties;

globalProperties

我们在应用的入口文件(如 main.ts)中定义一个全局变量:

// main.ts  
import { createApp } from 'vue';  
import App from './App.vue';  // 定义全局变量  
const globalVariable = {  message: 'Hello from global variable!'  
};  // 创建并挂载应用  
const app = createApp(App);  
app.config.globalProperties.$globalVariable = globalVariable; // 将全局变量添加到全局属性上  
app.mount('#app');

getCurrentInstance 来访问这个全局变量:

<!-- MyComponent.vue -->  
<template>  <div>  <p>{{ globalMessage }}</p>  </div>  
</template>  <script setup lang="ts">  
import { ref, onMounted } from 'vue';  
import { getCurrentInstance } from 'vue';  const globalMessage = ref('');  onMounted(() => {  const { proxy } = getCurrentInstance() if (proxy ) {  // 通过全局属性访问全局变量  const globalVariable = proxy.globalProperties.$globalVariable;  if (globalVariable) {  globalMessage.value = globalVariable.message;  }  }  
});  
</script>

然而,这种做法有几个问题:

1. 它违反了 Vue 的组件化原则,因为组件应该通过 props、events 或 provide/inject 来与其他部分通信,而不是直接访问全局状态。

2. 它使得代码更难理解和维护,因为全局状态的管理变得不透明。

3. 如果全局状态发生变化,组件可能不会自动更新,除非使用额外的机制来监听这些变化。

建议

更好的做法是使用 Vuex 或其他状态管理库来管理全局状态,或者使用 Vue 3 的 provide/inject API 在组件树中传递状态。如果你只是想在多个组件之间共享一些简单的数据,也可以考虑使用 provide/inject 而不是定义全局变量。

总之,尽管技术上可以通过 getCurrentInstance 访问全局变量,但这并不是推荐的做法。相反,你应该使用 Vue 提供的更合适和更可维护的机制来管理状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 面试题(七)

1. 在SpringBoot项目中如何实现数据库连接的连接池管理? 在Spring Boot项目中&#xff0c;数据库连接的连接池管理通常通过配置和自动配置功能来实现。Spring Boot默认使用HikariCP作为连接池&#xff0c;但也可以配置为使用其他连接池&#xff0c;如Tomcat JDBC Pool或C3P0。…

CTF之comment

网站的登录框里有提示 账号&#xff1a;zhangwei 密码&#xff1a;zhangwei***&#xff08;后三位要自己猜&#xff09; 用burpsuit抓包爆破发现密码为zhangwei666 进去后就一个留言榜&#xff08;目前没发现怎么用&#xff09; 扫一下网站发现git泄露 1.下载 进入root用户&…

故障诊断 | Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电缆故障诊断算法

故障诊断 | Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电缆故障诊断算法 目录 故障诊断 | Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电缆故障诊断算法分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电…

ssm052游戏攻略网站的设计与实现+vue

游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本游戏攻略网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…

shell的awk之gsub函数

gsub函数用法 gsub函数是AWK中用于全局替换的函数。它的语法是&#xff1a; gsub(regex, replacement, target) 其中&#xff0c;regex是一个正则表达式&#xff0c;用于匹配要替换的内容&#xff0c;replacement是替换的字符串或者值&#xff0c;target是要进行替换操作的目…

【AIGC调研系列】行业Agent的未来?来看看Newton模型

Archetype AI发布的Newton模型具有以下特点&#xff1a; 实时物理数据连接&#xff1a;Newton设计用于连接实时物理数据&#xff0c;如雷达、摄像头、加速度计等&#xff0c;通过全球数十亿传感器的输入&#xff0c;实现对物理世界的深入理解[3]。 理解并推理物理世界&#xf…

ssm+springboot校园勤工俭学助学兼职系统

本校园勤工俭学兼职系统主要包括三大功能模块&#xff0c;即管理员功能模块和学生功能模块及企业功能模块。 &#xff08;1&#xff09;管理员模块&#xff1a;系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员功能来管理后台系统。主要功能有&#xf…

ChatGPT应用指南:科研论文从未如此简单

ChatGPT无限次数:点击直达 html ChatGPT应用指南&#xff1a;科研论文从未如此简单 引言 在当今信息爆炸的时代&#xff0c;科研人员常常面临着查找、整理、创作大量文献的挑战。为了帮助科研人员提高工作效率&#xff0c;ChatGPT作为一种人工智能技术&#xff0c;为科研论…

【机器视觉】opencv教程、示例代码学习笔记汇总(建议收藏)

Microsoft Designer : https://designer.microsoft.com/design 注&#xff1a;文末附 AI对人生寄语的解析 通过对opencv的学习&#xff0c;机器视觉水平也从入门&#xff08;十分之&#xff09;二级提升到了入门&#xff08;十分之&#xff09;五级。 主页菜单已更新&#xff0…

# CuraEngine之代码阅读(1)之路径优化函数PathOrderOptimizer::optimize(全)

CuraEngine之代码阅读&#xff08;1&#xff09;之路径优化函数&#xff08;全&#xff09; 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的 STL CuraEngine之代码阅读&…

Flink入门学习 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小新~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &…

仿真服务器介绍及应用

仿真服务器是一种高性能的计算设备&#xff0c;专门用于运行复杂的仿真软件和处理大量的计算任务。 仿真服务器通常具备以下特点&#xff1a; 1. 高性能硬件配置&#xff1a;为了满足仿真软件对计算能力的要求&#xff0c;仿真服务器通常配备高性能的CPU、大量的内存以及高速的…

Win11 使用 WSL2 安装 linux 子系统 ubuntu

Win11 使用 WSL2 安装 linux 子系统 ubuntu 段子手168 1、用 部署映像服务和管理工具 dism.exe 命令&#xff0c;开启 WSL2 按【WIN R】&#xff0c;打开【运行】&#xff0c;输入&#xff1a;【cmd】&#xff0c;管理员打开【命令行提示符】。 启用适用于 Linux 的 Windo…

正则表达式---【Python版】

目录 前言 一.正则表达式概括 1.1简介 1.2使用场景 二.正则表达式语法 2.1基本匹配 2.2元字符 2.2.1点运算符. 2.2.2字符类[] 2.2.3否定字符类 2.2.4*号 2.2.5号 2.2.6&#xff1f;号 2.2.7{}号 2.2.8()号 2.2.9|或运算 2.2.10转码特殊字符\ 2.2.11^和$ 2.3简…

okcc呼叫中心卡机如何注册AG中继

注册 AG 中继通常涉及一系列步骤&#xff0c;以下是一个一般性的指南&#xff1a; 了解 AG 中继&#xff1a;首先&#xff0c;确保你了解 AG 中继的概念和作用。AG 中继是呼叫中心的关键组成部分&#xff0c;用于连接呼入呼出电话和底层通信网络。 选择合适的 AG 中继供应商&a…

社交媒体数据恢复:超级课程表

超级课程表是一款广受欢迎的应用程序&#xff0c;为学生提供便捷的课程查询和管理功能。然而&#xff0c;在使用过程中&#xff0c;数据丢失或误删的情况难免会发生。本文将介绍如何进行超级课程表的数据恢复&#xff0c;以确保用户的数据安全。 首先&#xff0c;我们需要了解…

css3 新增加的属性有哪些

没错 CSS3 从2011年成为标准之后&#xff0c;2024年了&#xff0c;面试题中还是会出现 CSS3 引入了许多新功能&#xff0c;例如&#xff1a; 动画&#xff1a;animation媒体查询&#xff1a;media。布局&#xff1a; flex、grid【网格布局】圆角&#xff1a; border-radius。阴…

Scrapy框架 进阶

Scrapy框架基础Scrapy框架进阶 【五】持久化存储 命令行&#xff1a;json、csv等管道&#xff1a;什么数据类型都可以 【1】命令行简单存储 &#xff08;1&#xff09;语法 Json格式 scrapy crawl 自定义爬虫程序文件名 -o 文件名.jsonCSV格式 scrapy crawl 自定义爬虫程…

Linux ping 其他主机并记录响应内容

此命令用于判断本机到其他机器之间的网络是否通畅&#xff0c;是否有终端或者响应超时的情况&#xff1a; nohup bash -c ping mysql.test.cn | while read pong; do echo "$(date "%Y-%m-%d %H:%M:%S") - $pong"; done >> ping.log & 输出结果…

Python并发编程——paramiko远程控制的模块;病毒攻击原理;dll注入

paramiko模块 介绍&#xff1a; paramiko是一个用于做远程控制的模块&#xff0c;使用该模块可以对远程服务器进行命令或文件操作&#xff0c;值得一说的是&#xff0c;fabric和ansible内部的远程管理就是使用的paramiko来现实。 2. 下载安装 pip3 install paramiko #在pytho…