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.hqwc.cn/news/169080.html

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

相关文章

scss 实用教程

变量 $ 定义变量 $link-color: blue;变量名可以与css中的属性名和选择器名称相同 使用变量 a {color: $link_color; }$highlight-border: 1px solid $link_color;中划线和下划线相互兼容&#xff0c;即中划线声明的变量可以使用下划线的方式引用&#xff0c;反之亦然。 $li…

find和grep命令的简单使用

find和grep命令的简单使用 一、find例子--不同条件查找 二、grep正则表达式的简单说明例子--简单文本查找例子--结合管道进行查找 一、find find 命令在指定的目录下查找对应的文件。 find [path] [expression]● path 是要查找的目录路径&#xff0c;可以是一个目录或文件名…

Rust图形界面egui初步

文章目录 下载和演示配置文件源代码 下载和演示 首先下载其源代码egui&#xff0c;然后进入其example文件夹&#xff0c;进入之后&#xff0c;使用cargo命令进行编译 cargo run --release -p hello_worldrust会自动下载一些相关的包和库&#xff0c;编译运行后&#xff0c;结…

移动端模型部署框架

移动端模型部署框架 1. MNN整体特点轻量性通用性高性能易用性架构设计主体工具致谢移动端模型部署框架 1. MNN https://www.yuque.com/mnn/cn/about MNN是全平台轻量级高性能深度学习引擎,广泛支持了阿里巴巴在计算机视觉、语音识别技术、自然语言处理等领域的70多个AI应用…

快速修复因相机断电导致视频文件打不开的问题

3-5 本文主要解决因相机突然断电导致拍摄的视频文件打不开的问题。 在日常工作中&#xff0c;有时候需要使用相机拍摄视频&#xff0c;比如现在有不少短视频拍摄的需求&#xff0c;如果因电池突然断电的原因&#xff0c;导致拍出来的视频播放不了&#xff0c;这时候就容易出大…

CHM Viewer Star 6.3.2(CHM文件阅读)

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件&#xff0c;支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计&#xff0c;支持多种浏览模式&#xff0c;如书籍模式、缩略图模式和文本模式等&#xff0c;并提供了丰富的功能和工具&#xff0c;如…

亲身体验告诉你:亚马逊云科技海外服务器是否值得一试?

前言 在当今数字化时代&#xff0c;云计算已经成为企业和个人发展的重要支撑。亚马逊云科技作为全球领先的云计算服务提供商&#xff0c;其海外服务器备受瞩目。然而&#xff0c;对于一些用户来说&#xff0c;是否值得一试亚马逊云科技的海外服务器仍然是一个疑问。本文将通过亲…

电脑小Tip---外接键盘F1-F12快捷键与笔记本不同步

当笔记本外接一款非常好用的静音键盘后&#xff0c;会出现一些问题。例如&#xff1a;外接键盘F1-F12与笔记本不同步。具体一个例子就是&#xff0c;在运行matlab程序时&#xff0c;需要点编辑器—运行&#xff0c;这样就很麻烦&#xff0c;直接运行的快捷键是笔记本键盘上的F5…

Llama2通过llama.cpp模型量化 WindowsLinux本地部署

Llama2通过llama.cpp模型量化 Windows&Linux本地部署 什么是LLaMA 1 and 2 LLaMA&#xff0c;它是一组基础语言模型&#xff0c;参数范围从7B到65B。在数万亿的tokens上训练的模型&#xff0c;并表明可以专门使用公开可用的数据集来训练最先进的模型&#xff0c;而无需求…

计算机视觉中目标检测的数据预处理

本文涵盖了在解决计算机视觉中的目标检测问题时&#xff0c;对图像数据执行的预处理步骤。 首先&#xff0c;让我们从计算机视觉中为目标检测选择正确的数据开始。在选择计算机视觉中的目标检测最佳图像时&#xff0c;您需要选择那些在训练强大且准确的模型方面提供最大价值的图…

MySQL数据库实验记录

输入密码 显示数据库 mysql命令以分号;结束 创建数据库 建表 写错了就会报错 没选数据库也会报错

数据分析实战 | 逻辑回归——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/d…