$event
中的target和currentTarget的区别
$event
是Vue自带的一个属性,可以看到很多属性。有点类似DOM中的event。
讲到这里我们就要提出一下下面两个重要的东西:
event.target
触发事件的元素对象
event.currentTarget
绑定事件的元素对象
我们来上案例来讲解一下两者的区别:
<body>
<div class="app">
<button @click="add($event)">点击添加</button>
<span>{{num}}</span>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script>
const app = new Vue({
el: '.app',
data: {
num: 0
},
methods: {
add(event) {
console.log('我是target',event.target)
console.log('我是currentTarget',event.currentTarget)
this.num += 1;
}
},
})
</script>
</body>
效果图如下:打印的内容我们发现是一样的
那让我们对代码进行一点修改再看看效果,我们修改button内的内容:
<button @click="add($event)"><a href="" @click.prevent="">点击添加</a></button>
我们来看效果:
这里发现了两者的区别,那正好我们就照着这个现象解释一下两者的概念:
event.target
触发事件的元素对象,这句话呢就像是事件流中的目标阶段,我 点击了哪个元素获取了哪个元素,最终就呈现出来该元素,不会连带其他的元素。
event.currentTarget
绑定事件的元素对象,这就像一个完整的事件流了,当你点击某个元素,通过事件流实际上是获取了它以及它的所有父级的元素,那么这个事件是否和它的父级绑定在一起?当我点击a
标签的时候所有有关它的都会被调用,所以就有了a
标签和button
标签。