当前位置: 首页 > news >正文

Vue2 VS Vue3

vue3

是的,Vue 3 确实取消了基于 JavaScript 原型的 Vue 和 VueComponent 构造函数(即你提到的 vm 和 vc),取而代之的是一种完全不同的、基于普通对象和代理(Proxy)的实例管理方式。

这是一个颠覆性的改变,它带来了更好的性能、更小的包体积和更灵活的 API 设计。

在这里插入图片描述

原生DOM事件 自定义事件
# ==============  vue2 中  ==============
1. 原生DOM事件 放在在元素 是原生DOM事件 比如 <button @click='hander' />
2. 原生DOM事件 放在组件上 需要通过.native修饰符 变为原生DOM事件,否则是自定义事件 比如 <MyComponet @click.native='hander' />
<template><!-- 监听组件根元素的原生 click 事件 --><MyButton @click.native="handleNativeClick" /><!-- 监听子组件的自定义事件 --><MyButton @my-click="handleCustomClick" />
</template>通过this.$emit(事件类型,参数)  触发
通过this.$off('事件类型')  解绑# ==============  vue3 中  ==============
1. 原生DOM事件(单击、双击等),无论放在元素,还是 组件   ,都是原生DOM事件//  在子组件中  <script setup>中
通过defineEmits 编译器宏来获取   // 声明事件
let emit = defineEmits(['事件类型'])
emit('事件类型',..args)// 3.3+:另一种更简洁的语法
//来指定事件的类型和参数,这有助于提高代码的可维护性和类型安全性
const emit = defineEmits<{change: [id: number] // 具名元组语法update: [value: string]
}>()<template><!-- 因为 'click' 不是声明的自定义事件,所以会作为原生事件加到根元素上 --><MyButton @click="handleNativeClick" /><!-- 'my-click' 是声明的自定义事件,所以由子组件 emit 触发 --><MyButton @my-click="handleCustomClick" />
</template>
<script setup>
let emit = defineEmits(['my-click']); // 声明后,@click 就是自定义事件 
</script>

在这里插入图片描述
在这里插入图片描述

vue2 全局事件总线 vue3 mitt 》》兄弟间组件、任意组件之间通信

vue2 全局事件总线

在这里插入图片描述

//1、安装 mitt 是第三方的 npm i mitt 
//2、创建 事件总线
// 文件位置:src/utils/eventBus.js
// 导入 mitt
import mitt from 'mitt';// 创建 mitt 实例
const emitter = mitt();// 导出该实例,以便在其它组件中使用
export default emitter;

》》发送方

<template><button @click="sendMessage">发送消息给 ComponentB</button>
</template><script setup>
// 导入我们创建的事件总线实例
import emitter from '@/utils/eventBus';const sendMessage = () => {// 使用 emit 触发一个名为 'message-from-a' 的事件,并附带数据emitter.emit('message-from-a', {text: '你好,这是来自 ComponentA 的消息!',timestamp: new Date()});console.log('消息已发送!');
};
</script>

》》接收方

<template><div><h3>收到消息:</h3><p v-if="receivedMessage">{{ receivedMessage }}</p></div>
</template><script setup>
import { ref, onMounted, onUnmounted } from 'vue';
// 导入事件总线
import emitter from '@/utils/eventBus';const receivedMessage = ref(null);// 定义处理事件的函数
const handleMessage = (data) => {receivedMessage.value = `${data.text} (发送时间: ${data.timestamp.toLocaleTimeString()})`;
};// 在组件挂载时开始监听事件
onMounted(() => {emitter.on('message-from-a', handleMessage);
});// !!! 非常重要:在组件卸载时移除监听器,防止内存泄漏
onUnmounted(() => {emitter.off('message-from-a', handleMessage);
});
</script>

文章转载自:

http://PjotXdkq.Lhhjz.cn
http://JumqKweZ.Lhhjz.cn
http://r6JxAkML.Lhhjz.cn
http://ys7lCDdc.Lhhjz.cn
http://RMOzCSIj.Lhhjz.cn
http://c8E7bdbo.Lhhjz.cn
http://3umrG4ag.Lhhjz.cn
http://uRtDnC4x.Lhhjz.cn
http://RWX58x7i.Lhhjz.cn
http://3OB8RFp1.Lhhjz.cn
http://FgTBy2g7.Lhhjz.cn
http://TGcVVUPM.Lhhjz.cn
http://lJ84fOcB.Lhhjz.cn
http://a9Mbnl2u.Lhhjz.cn
http://KEdf3daF.Lhhjz.cn
http://UHs1OjzA.Lhhjz.cn
http://7u6eGqE7.Lhhjz.cn
http://dN6ooPok.Lhhjz.cn
http://LST6MIBo.Lhhjz.cn
http://Ke4rOkrs.Lhhjz.cn
http://6UApSG6V.Lhhjz.cn
http://bkeWHdOl.Lhhjz.cn
http://nuKbmWVE.Lhhjz.cn
http://gnLz5vZd.Lhhjz.cn
http://E6PMWW9E.Lhhjz.cn
http://zTUONYs2.Lhhjz.cn
http://Gs1CjiLJ.Lhhjz.cn
http://xS34tNjp.Lhhjz.cn
http://jTbPajNQ.Lhhjz.cn
http://Lja9u5u3.Lhhjz.cn
http://www.dtcms.com/a/374581.html

相关文章:

  • 【ArcGIS】如何编辑图层的属性表
  • VueFlow的箭头怎么调整
  • 基于Vue3 +ElementuiPlus + Dexie.js自研的浏览器插件新建标签页tab
  • 【序列晋升】30 Spring Cloud Vault 安全配置管理的微服务守护者
  • 狂想-一种新颖的低成本内嵌标记的视触觉感知前导方案
  • 兰洋科技双展联动展示液冷创新成果,技术驱动打造绿色算力新基建
  • INDEMIND亮相2025科技创变者大会,以机器人空间智能技术解锁具身智能新边界
  • 百度SEM里什么是搜索广告、搜索词、否定关键词、上方位(竞价)广告?
  • 百度竞价推广:百度搜索竞价推广代运营
  • rabbitmq如何保证消息不丢失
  • 做百度SEM付费搜索推广时,竞价账号定向怎么设置?
  • html+css+JavaScript实现一个简单的登录
  • 【国内电子数据取证厂商龙信科技】从SQL语句开始数据库分析
  • 字节跳动Seed推出「机器人大脑」Robix:让机器人学会思考、规划与灵活互动
  • 【ComfyUI】Flux Schnell Fp8量化版图像生成
  • 【3DV 进阶-2】Hunyuan3D2.1 训练代码详细理解下-数据读取流程
  • 从零开始的云计算生活——第六十天,志在千里,使用Jenkins部署K8S
  • 平板热点频繁断连?三步彻底解决
  • nand flash的擦除命令使用
  • 《Pod调度失效到Kubernetes调度器的底层逻辑重构》
  • OC-单例模式
  • C语言链表设计及应用
  • 中级统计师-统计法规-第三章 统计法的基本原则
  • 【VR音游】音符轨道系统开发实录与原理解析(OpenXR手势交互)
  • web前端安全-什么是供应链攻击?
  • Saucony索康尼推出全新 WOOOLLY 运动生活羊毛系列 生动无理由,从专业跑步延展运动生活的每一刻
  • 后端(FastAPI)学习笔记(CLASS 2):FastAPI框架
  • Java如何实现一个安全的登录功能?
  • AI中的“预训练”是什么意思
  • 量子文件传输系统:简单高效的文件分享解决方案