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%,超六成的新商家…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
