Vue.js 中的 $emit 和 $on 方法有什么区别?
Vue.js 中的 $emit 和 $on 方法有什么区别?
在 Vue.js 中,$emit 和 $on 方法是两个常用的方法,用于实现组件间的通信。它们可以让我们在一个组件中触发一个自定义事件,并在另一个组件中监听这个事件,从而实现组件间的数据传递和交互。虽然它们的名字很相似,但它们的作用和用法有所不同。本文将介绍 $emit 和 $on 方法的区别,并通过代码示例来说明它们的用法。
$emit
$emit 方法是 Vue.js 中用于触发自定义事件的方法。它可以让我们在一个组件中触发一个自定义事件,并向父组件或祖先组件派发这个事件。在触发事件时,我们可以传递任意数量的参数,这些参数可以在监听事件的组件中获取到。
下面是一个使用 $emit 方法的示例代码:
// 定义一个名为 myButton 的组件
Vue.component('my-button', {template: `<button @click="onClick">Click me</button>`,methods: {onClick: function () {this.$emit('clicked', 'Hello, world!')}}
})// 定义一个名为 myApp 的组件,并在其中监听 myButton 组件的 clicked 事件
Vue.component('my-app', {template: `<div><my-button @clicked="onButtonClicked"></my-button><p>{{ message }}</p></div>`,data: function () {return {message: ''}},methods: {onButtonClicked: function (msg) {this.message = msg}}
})
在上面的代码中,我们定义了一个名为 myButton 的组件。这个组件中有一个按钮,当用户点击按钮时,会触发一个名为 clicked 的自定义事件,并将字符串 ‘Hello, world!’ 作为参数传递给事件处理函数。
然后,我们定义了一个名为 myApp 的组件,并在其中监听 myButton 组件的 clicked 事件。当 myButton 组件触发 clicked 事件时,myApp 组件中的 onButtonClicked 方法就会被调用,并将传递给事件处理函数的参数赋值给组件中的 message 数据,从而更新视图。
需要注意的是,$emit 方法只能向父组件或祖先组件派发事件,不能向子组件或后代组件派发事件。这是因为 Vue.js 中的事件传递是基于 DOM 树的,父组件可以通过 props 将数据传递给子组件,但是子组件不能直接向父组件传递数据。
$on
$on 方法是 Vue.js 中用于监听自定义事件的方法。它可以让我们在一个组件中监听一个自定义事件,并在事件触发时执行一个回调函数。在监听事件时,我们可以指定一个可选的参数,用于限制事件的作用域,使得事件只在指定的组件中有效。
下面是一个使用 $on 方法的示例代码:
// 定义一个名为 myButton 的组件,并在其中触发一个 clicked 事件
Vue.component('my-button', {template: `<button @click="onClick">Click me</button>`,methods: {onClick: function () {this.$emit('clicked', 'Hello, world!')}},created: function () {this.$emit('clicked', 'Hello, world!')}
})// 定义一个名为 myApp 的组件,并在其中监听 myButton 组件的 clicked 事件
Vue.component('my-app', {template: `<div><my-button></my-button><p>{{ message }}</p></div>`,data: function () {return {message: ''}},created: function () {this.$on('clicked', this.onButtonClicked)},methods: {onButtonClicked: function (msg) {this.message = msg}}
})
在上面的代码中,我们定义了一个名为 myButton 的组件,并在其中触发一个 clicked 事件。在 myApp 组件中,我们使用 $on 方法监听 myButton 组件的 clicked 事件,并指定该事件只在 myApp 组件中有效。当 myButton 组件触发 clicked 事件时,myApp 组件的 onButtonClicked 方法就会被调用,并将传递给事件处理函数的参数赋值给组件中的 message 数据,从而更新视图。
需要注意的是,$on 方法只能监听已经派发的事件,不能监听尚未派发的事件。因此,在上面的代码中,我们在 myButton 组件的 created 钩子函数中手动触发了 clicked 事件,以便 myApp 组件可以监听到该事件。
区别
$emit 和 o n 方法的区别主要在于它们的作用和用法。 on 方法的区别主要在于它们的作用和用法。 on方法的区别主要在于它们的作用和用法。emit 方法用于触发自定义事件并向父组件或祖先组件派发该事件,而 o n 方法用于监听自定义事件并在事件触发时执行回调函数。 on 方法用于监听自定义事件并在事件触发时执行回调函数。 on方法用于监听自定义事件并在事件触发时执行回调函数。emit 方法必须在组件内部使用,而 $on 方法可以在任何地方使用,包括组件内部和组件外部。
另外,$emit 方法可以传递任意数量的参数,而 o n 方法只能传递一个参数,这个参数就是事件处理函数在接收到事件时传递的数据。 on 方法只能传递一个参数,这个参数就是事件处理函数在接收到事件时传递的数据。 on方法只能传递一个参数,这个参数就是事件处理函数在接收到事件时传递的数据。emit 方法只能向父组件或祖先组件派发事件,而 $on 方法可以监听任意组件派发的事件。
总结
$emit 和 o n 方法是 V u e . j s 中用于实现组件间通信的两个重要方法。 on 方法是 Vue.js 中用于实现组件间通信的两个重要方法。 on方法是Vue.js中用于实现组件间通信的两个重要方法。emit 方法用于触发自定义事件并向父组件或祖先组件派发该事件,而 o n 方法用于监听自定义事件并在事件触发时执行回调函数。 on 方法用于监听自定义事件并在事件触发时执行回调函数。 on方法用于监听自定义事件并在事件触发时执行回调函数。emit 方法必须在组件内部使用,而 o n 方法可以在任何地方使用,包括组件内部和组件外部。 on 方法可以在任何地方使用,包括组件内部和组件外部。 on方法可以在任何地方使用,包括组件内部和组件外部。emit 方法可以传递任意数量的参数,而 o n 方法只能传递一个参数。 on 方法只能传递一个参数。 on方法只能传递一个参数。emit 方法只能向父组件或祖先组件派发事件,而 $on 方法可以监听任意组件派发的事件。
在实际开发中,$emit 和 $on 方法经常被用来实现父子组件之间的数据传递和交互。通过熟练掌握这两个方法的用法,我们可以更加灵活地组织组件间的关系,提高组件的复用性和可维护性。
相关文章:

Vue.js 中的 $emit 和 $on 方法有什么区别?
Vue.js 中的 $emit 和 $on 方法有什么区别? 在 Vue.js 中,$emit 和 $on 方法是两个常用的方法,用于实现组件间的通信。它们可以让我们在一个组件中触发一个自定义事件,并在另一个组件中监听这个事件,从而实现组件间的…...
LAZADA平台的商品评论Python封装API接口接入文档和参数说明
LAZADA是一个位于东南亚的电商平台,成立于2012年。该平台覆盖的国家包括新加坡、马来西亚、印尼、菲律宾、泰国和越南等地。它提供了一个多样化的产品选择,包括时尚、美容、数码、母婴等商品,并且拥有许多知名品牌的官方旗舰店。同时…...

云原生Docker镜像管理
docker是什么? docker是一个go语言开发的应用容器引擎。 docker的作用? ①运行容器里的应用; ②docker是用来管理容器和镜像的一种工具。 #容器 与 虚拟机 的区别? 容器虚拟机所有容器共享宿主机内核每个虚拟机都有独立的操…...

ChatGPT+小红书的8种高级玩法
掌握了这套万能命令,让你快速做出小红书爆款文案! 一、用ChatGPT做定位 我是一个大龄的普通人,没有什么特殊的技能,接下来,请你作为一位小红书的账号定位专家,通过与我对话的方式,为我找到我的小红书账号定…...

shell脚本学习记录1(运算符)
Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个…...

vector 迭代器失效问题
vector 迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所指向…...

docker使用与服务器上的可视化(ROS rviz等)
1.安装docker 安装docker:官网教程,按照官网命令一步步来即可。 添加当前用户到docker用户组: 【docker】添加用户到docker组,这样后面运行docker的时候前面不需要加sudo命令,否则运行docker的时候一直需要在前面加su…...

最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包
在Portraiture有非常强大的手动功能,可以为用户进行手动调整照片中的皮肤区域以达到更加完美的效果,软件还支持同时导入上千张照片,用户可以通过自动识别照片中的人脸从而依照自己的风格进行批量处理十分的方便快捷。 最新版本Portraiture 4…...

仓储WMS对接淘宝奇门详细说明【亲测可用】
文章目录 简介名词解释奇门对接方案前期准备系统调用流程代码实现思路关键点(个人观点)奇门对接关键代码可能遇到的问题 简介 淘宝奇门项目支持 ERP、WMS 之间的系统标准化对接,通过构建 ERP、WMS 系统之间标准通信协议来实现不同系统之间的打通;对商家…...

RFID软件:简介、功能和应用范围
在当今快节奏的商业环境中,RFID(射频识别)技术已经成为物流、供应链和库存管理等领域中不可或缺的工具。本文将向您介绍RFID软件的基本知识,探讨其功能和广泛应用的范围。 第一部分:RFID软件简介 RFID软件是一种应用…...

Android 逆向之安全防护基本策略
对抗反编译 混淆 使用混淆主要可以减小包的大小。混淆对于安全保护来说,只是增加了阅读难度而已。混淆不会把关键代码混淆掉,比如MainActivity,Application等,可以通过分析smali和阅读jar包定位代码。 资源混淆也是换汤不换药&…...

基站机房:保障通信网络稳定,如何解决安全隐患?
基站机房作为无线通信网络的关键组成部分,承载着大量的网络设备和通信设施,对于运营商和通信服务提供商来说具有重要意义。 无论是大型运营商还是通信服务提供商,动环监控系统都将成为他们成功运营和管理通信网络的关键工具。 客户案例 案例…...

sqlmap -os-shell 使用方法
一、burp suite抓包。 如上图所示,红框处很明显是一个传参点,我们就在这个页面抓包。 抓到包之后将内容保存到桌面的1000.txt文件下。 二、sqlmap跑包。 打开sqlmap跑包。 python sqlmap.py -r C:\Users\16434\Desktop\1000.txt -dbmsmysql --os-shell…...

Go语言并发之Select多路选择操作符
1、Go语言并发之Select多路选择操作符 select 是类 UNIX 系统提供的一个多路复用系统 API,Go 语言借用多路复用的概念,提供了 select 关键字,用 于多路监听多个通道。当监听的通道没有状态是可读或可写的,select 是阻塞的&#…...

黄金回收小程序开发功能有哪些?
一、用户端: 1、实时查询:通过对接三方接口实现实时金价动态查看; 2、多种类珠宝实时回收:小程序支持多品类珠宝的实时回收包含黄金饰品、金条、铂金、K金、白银等,同步实现价格实时更新; …...
nginx的详解与应用
前言 说明 要义 nginx 有一个master 进程和多个worker 进程。主进程的主要目的是读取和评估配置,以及维护工作进程。工作进程对请求进行实际处理。nginx 采用基于事件的模型和依赖于操作系统的机制在工作进程之间有效地分发请求。工作进程的数量在配置文件中定义…...
SpringBoot激活profiles的几种方式
多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在SpringBoot内支持了多种配置隔离的方式,可以激活单个或者多个配置文件。 激活的profiles要在项目内创建对应的配置文件,格式…...

【Java】Java核心要点总结:58
文章目录 1. java中 怎么确保一个集合不能被修改2. 队列和栈是什么 有什么区别3. Java8开始的ConcurrentHashMap为什么舍弃了分段锁4. ConcurrentHashMap 和 Hashtable有什么区别5. ReadWriteLock和StampeLock 1. java中 怎么确保一个集合不能被修改 Java 中可以使用 Collectio…...
前端面试题---作用域链和原型链
一.JavaScript 中的作用域链是如何工作的? JavaScript 中的作用域链(Scope chain)是一种用于查找变量和函数的机制,它是由嵌套的作用域环境组成的链式结构。 当在 JavaScript 中访问一个变量或函数时,解析器会首先在当前作用域…...
零售品牌私域流量池如何运营?火山引擎数智平台提供全套产品组合
虽然距离6月18日还有两周时间,但各大平台的第一波618战绩(预售尾款)已经相继出炉。 5月31日晚8点,京东率先公布618开门红10分钟销售战报:10分钟内,成交额破亿品牌数同比增长23%,超六成的新商家…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...