您的位置:首页 > 游戏 > 游戏 > 免费咨询法律律师在线12348_外贸找客户平台_上海网络营销公司_b2b十大平台排名

免费咨询法律律师在线12348_外贸找客户平台_上海网络营销公司_b2b十大平台排名

2025/2/27 2:29:33 来源:https://blog.csdn.net/chuanshixx/article/details/143425970  浏览:    关键词:免费咨询法律律师在线12348_外贸找客户平台_上海网络营销公司_b2b十大平台排名
免费咨询法律律师在线12348_外贸找客户平台_上海网络营销公司_b2b十大平台排名

在执行事件处理方法中,有时需要传入事件对象这个参数,例如,通过事件对象阻止事件的冒泡现象和默认动作。向方法中传入事件对象非常简单,一种是方法中不传任何参数,定义声明后直接获取,另外一种是向方法中传入一个特殊的变量$event,也可以获取事件对象。接下来通过一个示例来演示传入事件对象的过程。

实例4-3 事件对象参数

1. 功能描述

新建一个组件,在模板中添加三个div元素,其中二个为父子包裹结构,并分别绑定单击事件,执行一个相同的事件处理方法,当点击子元素时,在第三个div元素中显示每次单击元素时的累加值 。

2. 实现代码

在项目components 文件夹的ch4子文件夹中,添加一个名为“EventObject”的.vue文件,在文件中加入如清单4-3所示代码。

代码清单4-3 EventObject.vue代码

<template><div class="action"><div class="a-parent" @click="todo"><div class="a-child" @click="todo"></div></div><div class="a-item">数量:{{ intNum }}</div></div>
</template><script>
export default {name: "EventObject",data() {return {intNum: 0,};},methods: {todo() {this.intNum++;}}
};
</script>
<style scoped>
.action .a-item {margin: 10px 0;
}.action .a-parent {width: 100px;height: 100px;border: solid 1px #666;padding: 20px;
}.action .a-child {width: 100px;height: 100px;border: solid 1px #666;
}.action .a-item input {width: 80px;height: 32px;
}
</style>

3. 页面效果

保存代码后,页面在Chrome浏览器下执行的页面效果如图4-3所示。
在这里插入图片描述
  4. 源码分析

在上述示意图4-3中,由于存在事件的冒泡现象,当点击子元素时,同时也触发了父元素绑定的事件,因此,虽然是单击了一次子元素,但实际是执行两次相同的事件处理方法,所以,最终值显示为2。

为了解决这种事件冒泡现象,在Vue中,可以使用以下三种方法:

第1种,在现有代码基础之上,定义事件处理方法时,通过声明的方式,获取默认的事件对象,它是原生DOM事件对象,调用这个对象中的stopPropagation()方法就可以阻止冒泡现象的发生,修改代码如下所示:

 todo(event) {event.stopPropagation();this.intNum++;}

第2种,在元素触发事件调用方法时,将一个特殊的变量$event,作为事件对象参数传入方法中,此时方法中调用的事件对象,是元素在事件触发时真实传入的,因此,只需要修改元素绑定事件时的代码,代码修改如下所示:

<div class="a-child" @click="todo($event)"></div>

第3种,无论传参或不传参,都会修改事件处理方法,为了将DOM元素事件本身的特点与事件处理逻辑分离,在Vue中,也可以通过使用事件修饰符来完成事件冒泡的现象,即将调用事件时的写法修改成如下代码:

<div class="a-child" @click.stop="todo"></div>

在这3种方法中,前2种方法相对复杂,第3种是Vue中特有的写法,既简单,又高效,建议大家使用。无论用何种方法解决冒泡的现象,最终页面实现的效果将会如下图4-4所示。
在这里插入图片描述
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com