我正在学习Vue.js.目前,我正在努力了解事件。在Vue中,有Event Modifiers。我理解除了self
修饰符之外的所有目的。什么是self
修饰符?似乎stop
修饰符与self
的作用相同。我何时会使用self
?
感谢您的帮助。我觉得我必须误解一些事情。我只是没有看到self
的目的。
答案 0 :(得分:4)
如果父节点和子节点注册了相同类型的事件,那么当该类型事件调度时,将调用父节点和子节点的处理程序。
以下是fiddle示例。
尝试从父div的click事件修饰符中删除self
,然后单击子div。
调用父处理程序。
<div class="parent" v-on:click="log('from parent')">
Parent
<div class="child" v-on:click="log('from child')">
Child
</div>
</div>
如果您放回self
修饰符并单击子div则不会调用父处理程序。
答案 1 :(得分:2)
正如docs所说:
如果event.target是元素本身,则只触发处理程序
即。不是来自儿童元素
因此,如果您想捕获一个事件,该事件不是从子组件中的任何位置触发的,而是在单击整个组件时,您可以使用此修饰符。
答案 2 :(得分:2)
让我解释一下。
<div id="app">
<div class="root" v-on:click="log('root')">root
<div class="parent" v-on:click.self="log('parent')">Parent
<div class="child" v-on:click="log('child')">Child
</div>
</div>
</div>
</div>
您了解事件阶段吗?
Capture (event.eventPhase = 1)
Target (event.eventPhase = 2)
Bubbling (event.eventPhase = 3)
默认情况下,如果为元素添加事件侦听器,它将以冒泡模式工作。
如果您在示例中点击子,您将获得输出:
child
root
Modificator self 说:'如果用户点击我(我的区域或边框),请触发处理程序'
如果您移除自我:
<div class="parent" v-on:click="log('parent')">
然后点击孩子,您将获得输出:
child
parent
root
如果您添加停止:
<div class="parent" v-on:click.stop="log('parent')">
然后点击孩子,您将获得输出:
child
parent
您不会获得 root ,因为停止取消事件冒泡(event.stopPropagation)。
如果您使用自我,它不会停止冒泡!