Vue23组件自定义事件 和 解绑事件

Vue2&3组件自定义事件 和 解绑事件

Vue2组件自定义事件

  • 功能:父组件绑定数据,子组件触发事件。(父绑子触发)

在这里插入图片描述

  • 实现步骤(前三步在父组件实现,第四步在子组件实现):
    • 第一步:提供事件(组件)源
    • 第二步:给组件绑定事件(v-on:)
    • 第三步:编写回调函数,并和事件进行绑定
    • 第四步:等待事件的触发,只要事件触发,则执行回调函数。

使用方法:

  • vm.$emit(event, arg) //触发当前实例上的时间

第一种方式:在组件标签上绑定事件

// 父组件
<template><div>// 第一步:提供事件(组件)源// 第二步:给组件绑定事件(v-on:简写 => @)<User @event="eventBinding"></User></div>
</template>
<script>import User from './components/User.vue'export default {name : 'App',methods: {// 第三步:编写回调函数,并和事件进行绑定eventBinding(name, age){console.log(name, age)}},components : {User}}
</script>
// 子组件
<template><div><button @click="triggerEvent">触发事件</button></div>
</template>
<script>export default {name : 'User',data() {return {name : '张三',age : 20}},methods: {// 第四步:等待事件的触发,只要事件触发,则执行回调函数。triggerEvent(){this.$emit('event', this.name, this.age)}}}
</script>

第二种方式(常用):使用refs给组件绑定事件

// 父组件
<template><div><User ref="user"></User></div>
</template><script>import User from './components/User.vue'export default {name : 'App',mounted() {this.$refs.user.$on('event', this.eventBinding)},methods: {eventBinding(name, age){console.log(name, age)}},components : {User}}
</script>
// 子组件
<template><div><button @click="triggerEvent">触发事件</button></div>
</template>
<script>export default {name : 'User',data() {return {name : '张三',age : 20,}},methods: {triggerEvent1(){this.$emit('event', this.name, this.age)}}}
</script>

第一种 和 第二种有什么区别?

  • 其实并没有多大区别,两个用法其实都很多相同的地方,只是放的位置不同而已
第一种:<User @event="eventBinding"></User>
第二种(常用):<User ref="user"></User>this.$refs.user.$on('event', this.eventBinding)
  • ref=“user” 调用时,使用this.$refs.user
  • @event="eventBinding" == $on('event', this.eventBinding)

第二种的函数形式(不常用)

  • 普通函数
// 父组件
<template><div><User ref="user"></User></div>
</template><script>import User from './components/User.vue'export default {name : 'App',mounted() {/*function函数是被this.$refs.user调用的,而this.$refs.user调用的是User标签,User标签是User组件的,所以这里的this调的是User实例*/this.$refs.user.$on('event', function(){// 这里的this是子组件的实例,也就是User组件实例console.log(this)})},methods: {eventBinding(name, age){console.log(name, age)}},components : {User}}
</script>
  • 箭头函数
// 父组件
<template><div><User ref="user"></User></div>
</template><script>import User from './components/User.vue'export default {name : 'App',mounted() {/*箭头函数没有this,所以只能往上找mounted,而mounted是App父组件的,所以this调的是App组件实例*/this.$refs.user.$on('event', () => {// 这里的this是父组件的实例,也就是App组件实例console.log(this)})},methods: {eventBinding(name, age){console.log(name, age)}},components : {User}}
</script>

Vue2解绑事件 this.$off()

<template><div><button @click="triggerEvent">触发事件</button><button @click="unbinding">解绑事件</button></div>
</template><script>export default {name : 'User',data() {return {name : '张三',age : 20,}},methods: {triggerEvent(){this.$emit('event', this.name, this.age)},// 解绑事件unbinding(){// 解绑指定的事件this.$off('event')// 解绑多个事件,数组形式this.$off(['event', '', ''])// 解绑全部事件this.$off()}}}
</script>

Vue3组件自定义事件

  • setup函数中没有this关键字,所以在调用自定义事件时需要使用setup函数的第二个参数(context)
    • context表示组件的上下文,用context来调用emit将数据触发给父组件
    • 这里需要和props参数接受的数据来搭配使用
// App.vue
<template><User @event1="showInfo"></User>
</template><script>import Info from './components/Info.vue'export default {name : 'App',components : {Info},setup(){function showInfo(name){alert(`姓名:${name}`)}return {showInfo}}}
</script>
// Info.vue
<template><button @click="triggerEvent1">触发event1事件</button>
</template><script>export default {name : 'Info',// context表示组件上下文// 这里的props参数使用的是props配置项接受的数据setup(props, context){function triggerEvent1(){context.emit('event1', '张三')}return {triggerEvent1}}}
</script>

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

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

相关文章

ArcGIS进阶:栅格计算器里的Con函数使用方法

本实验操作为水土保持功能重要性评价&#xff1a; 所用到的数据包括&#xff1a;土地利用类型数据&#xff08;矢量&#xff09;、植被覆盖度数据&#xff08;矢量&#xff09;和地形坡度数据&#xff08;栅格&#xff09;。 由于实验数据较少&#xff0c;其思路也较为简单&a…

立体相机标定

相机成像过程中涉及的4个坐标系&#xff1a; 1、世界坐标系&#xff1a;由用户定义的三维世界坐标系&#xff0c;描述物体和相机在真实世界中的位置&#xff0c;原点可以任意选择。 2、相机坐标系&#xff1a;以相机的光心为坐标原点&#xff0c;X轴和Y轴平行于图像坐标系的X轴…

OpenHarmony 社区运营报告(2023 年 10 月)

● 截至 2023 年 10 月&#xff0c;OpenHarmony 社区共有 51 家共建单位&#xff0c;累计超过 6200 名贡献者产生 24.2 万多个 PR&#xff0c;2.3 万多个 Star&#xff0c;6.1 万多个 Fork&#xff0c;59 个 SIG。 ● OpenHarmony 4.0 版本如期而至&#xff0c;开发套件同步升级…

【js逆向实战】某sakura动漫视频逆向

写在前面 再写一个逆向实战&#xff0c;后面写点爬虫程序来实现一下。 网站简介与逆向目标 经典的一个视频网站&#xff0c;大多数视频网站走的是M3U8协议&#xff0c;就是一个分段传输&#xff0c;其实这里就有两个分支。 通过传统的m3u8协议&#xff0c;我们可以直接进行分…

建行广东省江门市分行走进农村地区开展反假货币宣传

人民对美好生活的向往&#xff0c;涉及方方面面&#xff0c;小至“钱袋子”安全。建行广东省江门市分行落实当地监管部门部署&#xff0c;积极扛起维护国家金融安全的重要政治责任&#xff0c;深入农村地区开展反假货币宣传工作&#xff0c;助力构建农村反假货币工作长效机制。…

拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、用户使用手册)

拓扑排序软件设计 前言1. 需求分析2. 可行性分析2.1 简介2.2 技术可行性分析2.2.1 技术实现方案2.2.2 开发人员技能要求2.2.3 可行性 2.3 操作可行性分析2.4 结论 3. 项目报告3.1 修订历史记录3.2 软硬件环境3.3 需求分析3.4 详细设计3.4.1 类设计3.4.2 核心流程描述3.4.3 核心…

安全通信网络(设备和技术注解)

网络安全等级保护相关标准参考《GB/T 22239-2019 网络安全等级保护基本要求》和《GB/T 28448-2019 网络安全等级保护测评要求》 密码应用安全性相关标准参考《GB/T 39786-2021 信息系统密码应用基本要求》和《GM/T 0115-2021 信息系统密码应用测评要求》 1网络架构 1.1保证网络…

Zephyr-7B论文解析及全量训练、Lora训练

文章目录 一、Zephyr&#xff1a;Direct Distillation of LM Alignment1.1 开发经过1.1.1 Zephyr-7B-alpha1.1.2 Zephyr-7B-beta 1.2 摘要1.3 相关工作1.4 算法1.4.1 蒸馏监督微调&#xff08;dSFT&#xff09;1.4.2 基于偏好的AI反馈 (AIF&#xff09;1.4.3 直接蒸馏偏好优化&…

论文阅读[121]使用CAE+XGBoost从荧光光谱中检测和识别饮用水中的有机污染物

【论文基本信息】 标题&#xff1a;Detection and Identification of Organic Pollutants in Drinking Water from Fluorescence Spectra Based on Deep Learning Using Convolutional Autoencoder 标题译名&#xff1a;基于使用卷积自动编码器的深度学习&#xff0c;从荧光光谱…

Clickhouse学习笔记(8)—— 建表优化

数据类型 时间字段 建表时能用数值型或日期时间类型&#xff08;DateTime&#xff09;表示的字段就不要用字符串 因为clickhouse进行分区时一般使用时间字段来进行分区&#xff0c;而将时间字段使用DateTime表示&#xff0c;不需要经过函数转换处理&#xff0c;执行效率高、…

黑窗口连接远程服务

ssh root192.168.x.x 回车输入密码 查看docker docker ps 停止正在运行的服务 docker stop xxxxx 删除服务 docker rm xxxxx 查看镜像 docker images 删除镜像 docker rmi xxxxx 删除镜像 启动并运行整个服务 docker compose up -d jar包名称 idea 使用tcp方式连接docker 配置d…

深度探究深度学习常见数据类型INT8 FP32 FP16的区别即优缺点

定点和浮点都是数值的表示&#xff08;representation&#xff09;&#xff0c;它们区别在于&#xff0c;将整数&#xff08;integer&#xff09;部分和小数&#xff08;fractional&#xff09;部分分开的点&#xff0c;点在哪里。定点保留特定位数整数和小数&#xff0c;而浮点…

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后&#xff0c;在回到前端编写html、css、js这些东西会感觉到各种的不便。比如&#xff1a;不能放心的使用模块化规范&#xff08;浏览器兼容性问题&#xff09;、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…

S7-1200PLC和SMART PLC开放式以太网通信(UDP双向通信)

S7-1200PLC的以太网通信UDP通信相关介绍还可以参考下面文章链接: 博途PLC开放式以太网通信TRCV_C指令应用编程(运动传感器UDP通信)-CSDN博客文章浏览阅读2.8k次。博途PLC开放式以太网通信TSENG_C指令应用,请参看下面的文章链接:博途PLC 1200/1500PLC开放式以太网通信TSEND_…

图书销售数据大屏可视化【可视化项目案例-03】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…

k8s 裸金属集群部署metalLB软负载均衡 —— 筑梦之路

metalLB 官方网站 Repo&#xff1a;https://github.com/metallb/metallb 官网&#xff1a;https://metallb.universe.tf/installation metalLB解决什么问题&#xff1f; MetalLB 是一个用于裸机 Kubernetes 集群的负载均衡器实现&#xff0c;使用标准路由协议。 k8s 并没有为裸…

【m98】webrtc vs2017构建带符号的debug库

调试有符号 调试 无符号 试试exe不输出到独立的文件? -】 直接输出到sln下面

(2023|CVPR,扩散,主体标识符,先验保存损失)DreamBooth:微调文本到图像的扩散模型以实现主题驱动的生成

DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.…

C语言--从键盘输入当月利润I,求应发奖金总数。

题目描述&#xff1a; 企业发放的奖金根据利润提成。利润I低于或等于100000元的&#xff0c;奖金可提成10%; 利润高于100000 元&#xff0c;低于200000元(1000001000000时&#xff0c;超过1000000元的部分按 1%提成。从键盘输入当月利润I,求应发奖金总数。 int main() {int m…

使用MybatisPlus时出现的java.lang.NullPointerException异常~

错误描述如下所示&#xff1a; 错误原因&#xff1a;Junit的导包错误 单元测试的包有如下所示两个 我们应该根据springboot的版本进行选择&#xff0c; 在Spring Boot 2.2.X以后使用import org.junit.jupiter.api.Test Junit5 在Spring Boot 2.2.x之前使用import org.junit.T…